我正在使用Spring自动连接bean进行配置。一些参数来自属性文件:
<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
答案 0 :(得分:1)
在你的班级myproject.mydb
@Autowired
public mydb(@Value("mydb.host") String host, ...){...}
答案 1 :(得分:1)
为了实现您想要的目标,我认为您需要实现BeanPostProcessor
并在postProcessBeforeInitialization
中提供自定义布线逻辑(您在其中读取.properties文件)。 bean名称可用于该方法,但是存在多个问题。第一个是参数名称是not necessarily available at runtime,因此索引可能是更好的选择。第二个是你已经有一个实例化的bean(所以默认的构造函数需要存在),然后你实例化另一个,抛出第一个浪费的东西。要使用已经存在的实例,您需要通过属性而不是构造函数来连接它,这违反了封装并且不是您要求的。第三是它发生了什么事情并不明显。所以,总而言之,你最好完全避免这种情况。
答案 2 :(得分:0)
根据您的问题,可以将属性值注入构造函数的唯一方法是通过上面的XML文件或使用@Value("${some.property}")
注释。
有关详细信息,请参阅this
答案 3 :(得分:0)
使用@Value(“属性键”)注释。看看例如:http://java.dzone.com/articles/autowiring-property-values