gpt4 book ai didi

java - 为什么 Spring 注解和 xml 配置注入(inject)集合的方式不同?

转载 作者:行者123 更新时间:2023-12-02 01:57:02 25 4
gpt4 key购买 nike

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

public class BookingService{
private Set<Record> bookingDB;

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

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

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

Spring 将按预期构造具有空记录集的类

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

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

返回1

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

@Configuration
public class AppConfiguration {

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

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

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

最佳答案

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

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

关于java - 为什么 Spring 注解和 xml 配置注入(inject)集合的方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52175076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com