一蚁堤、什么是Spring容器嫩实?
Spring容器刽辙,也稱Spring Ioc容器或bean容器,是Spring框架的核心甲献,Srping容器對很多人來說是比較抽象難以理解的宰缤;
1、從概念層面講晃洒,對象的創(chuàng)建慨灭、初始化以及銷毀的整個生命周期都交由Spring容器去管理,大大減少了開發(fā)的工作量球及;
2氧骤、從代碼層面講,一個Spring容器就是一個實現了ApplicationContext接口的類的一個實例吃引,即一個Spring容器就是一個AlicaitonContext(對象)
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Cat democat = context.getBean("cat",Cat.class);
如上圖筹陵,context就是創(chuàng)建的一個Spring容器,容器里裝載著applicationContext.xml文件中配置的所有對象镊尺。
二朦佩、Spring容器是如何管理對象的
首先先介紹一下兩個概念:IOC(控制反轉)、DI(依賴注冊)庐氮。
IOC:將對象的創(chuàng)建语稠、初始化和銷毀的整個生命周期都交給容器去做,而不是再有程序員自己去new了弄砍,所以稱之為控制反轉仙畦,這個概念顧名思義很好理解,這也與上面介紹Spring容器的概念呼應音婶。
DI:Spring在啟動的時候會實例化所需要的類慨畸,這里以實例化A類為例,若存在A類依賴于B類的情況桃熄,在實例化A對象的過程中會首先實例化B類先口,再實例化A類型奥,依賴傳入A類的方式必須是通過A類的構造函數瞳收,因此A類在實例化的過程中會接收并保存依賴的對象。
//B類
public class Car{
private String color;
private brand;
public Car(String color,String brand){
this.color = color;
this.brand = brand;
}
}
//A類厢汹,依賴于B類
public class Boss{
private Car car;
public Boss(Car car){
this.car = car;
}
}
三螟深、SpringBoot中創(chuàng)建bean的幾種方式
不同于Spring框架中bean的配置都是在xml中進行的,比較繁瑣烫葬,springboot中主要采用注解的方式實現bean的創(chuàng)建
1界弧、注解形式:@Component凡蜻、@Service、@Repository垢箕、@Controller
Spring運行時划栓,容器會自動掃描加載被這些注解修飾的類,自動生成bean条获,并保存到Spring容器中
2忠荞、@Bean形式:配合@Configuration注解創(chuàng)建bean
@Configuration
public class BeanLoadConfig {
@Bean
public ConfigDemoBean configDemoBean() {
return new ConfigDemoBean();
}
}
@Configuration相當于xml文件中的beans標簽,@Bean相當于bean標簽帅掘,方法名相當于bean標簽中的id委煤,方法的返回值注入到sprig容器中,相當于class的一個實例修档。
具體可參考該博文碧绞,簡單易懂:https://blog.csdn.net/luzhensmart/article/details/90666380
四、Springboot中bean的使用方式
上面講到了Springboot中bean的創(chuàng)建過程吱窝,下面就將如何在項目中使用bean讥邻。
1、使用@AutoWired和@Resource注解實現自動裝配癣诱,如下圖所示:
被@Controller修飾的CaseManagerController類在實例化為bean對象的過程中需要先對依賴CoreAutoTestCase類進行實例化计维,CoreAutoTestCase類實例化生成bean后,通過@Autowired或@Resource注解撕予,裝配注入到當前的bean對象中鲫惶,也就是說CaseManagerController類實例化bean對象中保存有CoreAutoTestCase類的實例化bean對象信息。因為在被@controller修飾的類中幾乎是不存在構造函數的实抡,我們上一章節(jié)講到依賴只能通過構造函數注入到當前的bean中欠母,因此@AutoWired和@Resource注解也相當于起到了一個這樣的一個構造函數的作用,下面我們就要將通過構造函數的方式使用bean對象了吆寨。
@Controller
public class CaseManagerController {
@Autowired
private CoreAutoTestCase coreAutoTestCase;
@Autowired
private CoreAutoTestPlanCaseRelationshipMapper relationshipMapper;
.................
2赏淌、構造方法:就是在構造方法中傳入Bean對象來初始化
@Controller
public class CaseManagerController {
private CoreAutoTestCase coreAutoTestCase;
public CaseManagerController(CoreAutoTestCase coreAutoTestCase){
this.coreAutoTestCase = coreAutoTestCase;
}
.................
-----------未完,待補充啄清。
原博文鏈接:http://www.54gwz.cn/article/1591175285