Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Spring上下文到Spring注释_Java_Spring_Spring Boot - Fatal编程技术网

Java 从Spring上下文到Spring注释

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

我正在将我的项目包从SpringXML文件配置移动到类注释配置。 Im被困在另一个上下文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上下文文件的任何引用。 有什么需要帮忙的吗?我应该去哪里找?我错过了什么?
谢谢,

通过加载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
    }
}