有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案