Java 从Spring上下文到Spring注释
我正在将我的项目包从SpringXML文件配置移动到类注释配置。 Im被困在另一个上下文xml文件中定义的bean上的bean实例化失败。 这就是定义:Java 从Spring上下文到Spring注释,java,spring,spring-boot,Java,Spring,Spring Boot,我正在将我的项目包从SpringXML文件配置移动到类注释配置。 Im被困在另一个上下文xml文件中定义的bean上的bean实例化失败。 这就是定义: <bean id="mglsChecker" class="DefaultMglsAdapter" destroy-method="close"> <constructor-arg value="${mgls.server.address}"/> <constructor-arg v
<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上下文文件的任何引用。
有什么需要帮忙的吗?我应该去哪里找?我错过了什么?
谢谢,通过加载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
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
}
}
编辑:incorporated Andreas’correction:)当您离开XML上下文时,是否也可以提供相关的Java代码?特别是,了解您是否试图在任何地方加载该上下文文件将非常有用。Spring不会对您要加载的xml文件做出假设,因此要么加载(手动加载?),要么不会实例化该类。虽然这很好(+1),但它缺少了旧的
定义的destroy method=“close”
部分。@Andreas哦,我错过了。如果不将适配器类更改为@Component
类,我看不出如何轻松实现。这缺少了旧
定义中的destroy method=“close”
部分。
@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
}
}