置的属性同名的bean
。
byType
:类似于按名称进行自动装配,仅基于属性的类型。这意味着Spring
将查找具有相同类型的属性来设置的bean
。如果有多个bean
具有该类型,则框架会抛出异常。
constructor
:基于构造函数参数进行自动装配,意味着Spring
将查找具有与构造函数参数相同类型的bean
。
例如,让我们通过类型创建具有依赖项item
的store
bean
。
public class AppConfig {
@Bean
public Item item() {
return new ItemImpl1();
}
@Bean(autowire = Autowire.BY_TYPE)
public Store store() {
return new Store();
}
}
请注意,自Spring 5.1
起,autowire
属性已弃用。
我们还可以使用@Autowired
注释按类型注入bean
:
public class Store {
@Autowired
private Item item;
}
如果存在相同类型的多个bean
,则可以使用@Qualifier
注释按名称引用bean
:
public class Store {
@Autowired
@Qualifier("item1")
private Item item;
}
现在,让我们通过XML
配置按类型自动装配bean
:
<bean id="store" class="org.baeldung.store.Store" autowire="byType"> </bean>
接下来,让我们通过XML
按名称将名为item
的bean
注入到store
bean
的item
属性中:
<bean id="item" class="org.baeldung.store.ItemImpl1" />
<bean id="store" class="org.baeldung.store.Store" autowire="byName">
</bean>
我们还可以通过构造函数参数或setter
显式定义依赖关系来覆盖自动装配。
惰性初始化的bean
默认情况下,容器在初始化期间创建和配置所有单例bean
。为了避免这种情况,我们可以在bean
配置上使用值为true
的lazy-init
属性:
<bean id="item1" class="org.baeldung.store.ItemImpl1" lazy-init="true" />
因此,只有在第一次请求它时,才会初始化item1
bean
,而不是在启动时。这样做的优点是初始化时间更快,但缺点是我们在bean
被请求之后才会发现任何配置错误,这可能是应用程序已运行数小时甚至数天之后。
结论
在本文中,我们介绍了控制反转和依赖注入的概念,并在Spring
框架中进行了示例。
最后
为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:
公众号搜索Let us Coding
,知乎,开源中国,CSDN,思否,掘金,InfoQ,简书,博客园,慕课,51CTO,helloworld,腾讯开发者社区,阿里开发者社区
看完如果觉得有帮助,欢迎点赞、收藏和关注