java为什么Spring注释和xml配置以不同的方式注入集合?
比如说,有一种服务将数据存储在集合中
public class BookingService{
private Set<Record> bookingDB;
public BookingService(Set<Record> bookingDB){
this.bookingDB = bookingDB;
}
}
现在,如果bookingDB是通过XML配置注入的
<bean id="bookingService" class="com.example.BookingService">
<constructor-arg><set></set></constructor-arg>
</bean>
Spring将按预期使用空记录集构造类
但如果同样的操作是通过注释完成的,那么Spring将为bookingDB构造一个集合,该集合已经包含由Record的默认构造函数生成的一条记录
@Autowired
public BookingService( Set<Record> bookingDB ) {
this.bookingDB = bookingDB;
System.out.println(this.bookingDB.size());
}
返回1
为什么春天会这么做?即使我显式地告诉它在bean定义中返回空的HashMap,Autowire构造函数也会被设置为1条记录
@Configuration
public class AppConfiguration {
@Bean(name = "bookingDB")
public Set<Record> bookingDB(){
return new HashSet<>();
}
}
我发现的唯一方法是直接注入值,但这忽略了通过构造函数传递DB的意义:
@Component
public class BookingService{
@Resource(name = "bookingDB")
private Set<Record> bookingDB;
# 1 楼答案
这实际上是关于在定义bean时进行注入,然后在初始化spring应用程序上下文时通过这个bean定义集合。bean将被注入集合
结帐https://www.logicbig.com/tutorials/spring-framework/spring-core/injecting-collections.html