繁体   English   中英

从XML的属性文件自动装配Spring构造函数参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM