为什么 Spring 注释和 xml 配置以不同的方式注入集合?



假设有一些服务将数据存储在集合中

public class BookingService{
private Set<Record> bookingDB;
public BookingService(Set<Record> bookingDB){
this.bookingDB = bookingDB;
}
}

现在,如果通过XML配置注入bookingDB

<bean id="bookingService" class="com.example.BookingService">
<constructor-arg><set></set></constructor-arg>        
</bean>

Spring 将按预期使用空记录集构造类

但如果通过注释完成相同的操作,那么 Spring 将为 bookingDB 构建 Set,该 Set 已经包含一个由 Record 的默认构造函数生成的记录

@Autowired
public BookingService( Set<Record> bookingDB ) {
this.bookingDB = bookingDB;
System.out.println(this.bookingDB.size());
}

返回 1

为什么春天会这样做?即使我明确告诉它在 bean 定义中返回空的 HashMap,Autowire 构造函数也会得到 Set 1 条记录。

@Configuration
public class AppConfiguration {
@Bean(name = "bookingDB")
public Set<Record> bookingDB(){
return new HashSet<>();
}
}

我发现的唯一方法是直接注入值,但这错过了通过构造函数传递数据库的重点:

@Component
public class BookingService{
@Resource(name = "bookingDB")
private Set<Record> bookingDB;

这实际上是关于在定义 bean 时注入,然后在初始化 spring 应用程序上下文时通过这个 bean 定义集合,bean 将被注入到集合中

结帐 https://www.logicbig.com/tutorials/spring-framework/spring-core/injecting-collections.html

最新更新