我正在将项目包从 Spring xml 文件配置移动到类注释配置。 我遇到了另一个上下文 xml 文件中定义的 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 文件时,我不明白它是如何工作的。 在原始 applicationContext.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 - 从 Spring 上下文到 Spring 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60208543/