从XML中的属性文件自动连接Spring构造函数参数

时间:2014-10-10 12:12:00

标签: java spring

我正在使用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

的属性

4 个答案:

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