java - 从 Spring 上下文到 Spring 注解

标签 java spring spring-boot

我正在将项目包从 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/

相关文章:

java - 如何使用 Azure AD B2C 保护 Spring Boot REST API 的安全?

java - Files.copy 上的 AccessDeniedException 来自 Java NIO2 中的临时文件

java - 在Activiti中获取带有服务任务的流程图

java - 将 json 输出作为参数传递给 java 中的 linux 程序

java - 如何转换SimpleFormController?

java - 在对引用非 id 字段的 @ManytoOne 字段进行当前操作之前,必须保存 transient 实例

java - Spring Security 多个成功和失败处理程序不能很好地工作

java - Spring默认的RequestParam值等于方法调用

java - 在 Amazon AWS 上启动 Spring Boot 应用程序,如何设置目标运行时

Spring Boot 应用程序在主方法中从属性文件中读取值