SpringBoot直接可以用@Autowried原理是什么?
以前我們使用@Autowired要自己創建Bean:https://www.cnblogs.com/maomaodesu/p/12180477.html#創建bean
但SpringBoot在引入坐標時會自動創建Bean,這種綁定坐標創建Bean的方式我們也可以手動實現:
創建一個Bean比如User,
通過注解方式把Bean配置到SpringIOC容器中:寫一個userConfig配置類,使用到@Configuration注解和@Bean注解(底層又用到@Enable*和@Import)
最常用的定義Bean的方式:
創建配置類,在配置類中定義Bean
@Configuration
public class UserConfig{
@Bean
public User user(){
return new User();
}
}
使用getBean("user")方法是可以從IOC容器中創建出user對象的。
在userConfig類中加入@Condition條件注解,新建一個Condition類來充當條件(該類的返回值是true或者flase)
如果讓Condition類一直返回false,則使用getBean(User.class)方法是無法從IOC容器中找到user的。
總結一下就是,SpringBoot通過這種方式讓Condition類的判斷依據為是否導入某坐標,這樣就可以產生一旦導入該坐標就允許直接從IOC里創建該對象而無需手寫Bean的現象。