我想要@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/