gpt4 book ai didi

java - 如何使用非空构造函数 Autowiring 类?

转载 作者:行者123 更新时间:2023-12-02 05:43:50 26 4
gpt4 key购买 nike

我想要@Autowired一个具有非空构造函数的类。以下仅作为示例,它不一定是 View /服务。可以是任何你喜欢的组件,具有非默认构造函数:

@Component
class MyViewService {
//the "datasource" to show in the view
private List<String> companies companies;
private MyObject obj;

public MyViewService(List<String> companies, MyObject obj) {
this.companies = companies;
this.obj = obj;
}
}

当然我不能只写

@Autowired
private MyViewService viewService;

因为我想将构造函数与列表一起使用。但如何呢?

是否有比将此类构造函数重构为 setter 更好的方法?我不喜欢这种方法,因为理想情况下构造函数会强制其他类提供服务中所需的所有对象。如果我使用 setter ,人们很容易忘记设置某些对象。

最佳答案

如果您希望 Spring 管理 MyViewService,您必须告诉 Spring 如何创建它的实例。如果您使用 XML 配置:

<bean id="myViewService" class="org.membersound.MyViewService">
<constructor-arg index="0" ref="ref_to_list" />
<constructor-arg index="1" ref="ref_to_object" />
</bean>

如果您使用 Java 配置,那么您需要在 @Bean 带注释的方法中自行调用构造函数。

查看 Spring docs关于这个话题。要解决您对另一个答案所做的评论,您可以 create a List bean在 XML 中,如 Spring 文档中所示。如果列表数据不固定(可能不是),那么您需要使用 instance factory method实例化 bean。

简而言之,您寻求的答案都在 Spring 文档中:)

关于java - 如何使用非空构造函数 Autowiring 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24286546/

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