从spring上下文到spring注解

wvt8vs2t  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(349)

我正在将我的项目包从springxml文件配置移到类注解配置。在另一个上下文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文件时,我不明白它是如何工作的。在原始的applicationcontext.xml中,我没有看到对这个mglschecker上下文文件的任何引用。有什么需要我查的吗?我错过了什么?谢谢,

vm0i2vca

vm0i2vca1#

你可以用

@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
    }
}

编辑:安德烈亚斯的更正:)

qeeaahzv

qeeaahzv2#

通过加载java文件中的属性

@Configuration
@PropertySource("classpath:foo.properties")
public class DefaultMglsAdapter{

    //...
}

通过注入属性

@Value( "${mgls.server.address}" )
private String serverAddress;
qf9go6mv

qf9go6mv3#

用“${}”语法提到的变量是属性的键/占位符。请从*.properties或*.config或*.xml或任何此类自定义属性文件中搜索或查找此类密钥。如果找到任何此类属性文件,请指定要在其中配置该文件的类路径或位置,如下所示:
通过xml:

<context:property-placeholder location="classpath:path/to/PropertiesFile"/>

按注解:

@Configuration    
@PropertySource("classpath:path/to/PropertiesFile")    
@Value("${Property}")

谢谢和问候。

相关问题