[英]Auto-wiring Spring constructor arguments from properties file in XML
我正在使用Spring自动接线进行配置。 一些参数来自属性文件:
<bean id="mydb" class="myproject.mydb" autowire="constructor">
<constructor-arg name="host" value="${mydb.host}" />
<constructor-arg name="db" value="${mydb.db}" />
<constructor-arg name="user" value="${mydb.user}" />
<constructor-arg name="password" value="${mydb.password}" />
</bean>
有没有一种方法可以根据Bean id
自动关联这些属性,因此我只需要编写以下内容?
<bean id="mydb" class="myproject.mydb" autowire="constructor" />
编辑:这样做的目的是不必显式指定非bean构造函数参数。 我希望Spring自动检查beanId.constructorArgName
的属性
在您的班级myproject.mydb
@Autowired
public mydb(@Value("mydb.host") String host, ...){...}
为了实现您想要的功能,我认为您需要实现BeanPostProcessor
并在postProcessBeforeInitialization
提供自定义的接线逻辑(在其中读取.properties文件)。 Bean名称可用于该方法,但是存在多个问题。 首先是参数名称不一定在运行时可用 ,因此索引可能是一个更好的选择。 第二个是您已经有一个实例化的bean(因此需要一个默认的构造函数),并且您将实例化另一个,将第一个扔掉是浪费的。 要使用已经存在的实例,您需要按属性而不是构造函数进行连接,这违反了封装并且不是您所要求的。 第三是发生的事情一点也不明显。 因此,总的来说,最好完全避免这种情况。
根据您的问题,将属性值注入构造函数的唯一方法是通过XMLfile进行上述操作,或使用@Value("${some.property}")
批注。
请参阅此以获取更多信息
使用@Value(“ property key”)批注。 看看例如: http : //java.dzone.com/articles/autowiring-property-values
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.