我正在将我的项目包从Spring xml文件配置移动到类注释配置。 我卡在另一个上下文 xml 文件中定义的 Bean 上失败的 Bean 实例化。 这是定义:
<bean id="mglsChecker" class="DefaultMglsAdapter" destroy-method="close">
<constructor-arg value="${mgls.server.address}"/>
<constructor-arg value="${mgls.fname}"/>
<constructor-arg value="${mgls.lcount}"/>
</bean>
mglsChecker 类是在整个"解决方案"通用的基础设施包中定义的。 问题是变量"${}"没有定义,所以现在这个类没有实例化。 当我的项目是xml文件配置时,我不明白它是如何工作的。 在原始应用程序上下文中.xml我没有看到对此 mglsChecker 上下文文件的任何引用。 任何帮助我应该在哪里调查?我错过了什么? 谢谢
您可以使用
@Configuration
class YourConfig {
// you usually don't need to explicitly give the bean name
// if you don't, Spring gives it the config's method name
@Bean(name = "mglsChecker", destroyMethod = "close")
MglsAdapter mglsChecker(@Value("${mgls.server.address}") String address,
@Value("${mgls.fname}") String fname,
@Value("${mgls.lcount}") long lcount) {
return new DefaultMglsAdapter(address, fname, lcount);
}
}
就个人而言,我更喜欢创建@Component
类,但为此您需要能够编辑DefaultMglsAdapter
类。
@Component
class DefaultMglsAdapter implements MglsAdapter {
// fields to hold the configs
DefaultMglsAdapter(@Value("${mgls.server.address}") String address,
@Value("${mgls.fname}") String fname,
@Value("${mgls.lcount}") long lcount) {
// set fields
}
@PreDestroy
void close() {
// cleanup
}
}
编辑:纳入安德烈亚斯的更正:)
通过以下方式加载 java 文件中的属性
@Configuration
@PropertySource("classpath:foo.properties")
public class DefaultMglsAdapter{
//...
}
通过以下方式注入属性
@Value( "${mgls.server.address}" )
private String serverAddress;
用"${}"语法提到的变量是属性的键/占位符。 请从 *.properties 或 *.config 或 *.xml 或任何此类自定义属性文件中搜索或查找此类键。如果找到任何此类属性文件,请指定要在其中配置该文件的类路径或位置,如下所示:
通过 XML:
<context:property-placeholder location="classpath:path/to/PropertiesFile"/>
通过注释:
@Configuration
@PropertySource("classpath:path/to/PropertiesFile")
@Value("${Property}")
谢谢和问候。