Java Spring启动: Not able to access @Bean defined in @Configuration

标签 java spring spring-boot annotations

我在Spring-boot Configuration(用@Configuration注释)类中定义了这样的Bean:

@Bean
public MyRegistry myRegistry() {
    return new MyRegistry();
}

MyRegistry 看起来像这样:

@Component
@Getter
@Setter
public class MyRegistry {
    Map<String, Object> resourcesMap = new HashMap<>();

    public MyRegistry() {
        resourcesMap.put("handler1", new MyHandler1());
        resourcesMap.put("handler2", new MyHandler2());
    }
}

现在,在另一个带有 @Component 的类中,我已经 @Autowired myRegistry 并按如下方式使用它:

MyHandler1 handler1 = new ObjectMapper().convertValue(myRegistry.getResourcesMap().get("handler1"), MyHandler1.class);

启动 Spring-Boot 应用程序时没有收到任何错误,但应用程序运行时,无法访问 Handler1 的方法。

想了解我在这里做错了什么。我可能搞乱了注释的使用,因为我是 Spring-Boot 的新手

最佳答案

那么下面的代码(snippet1)可以工作吗?

Object mHandler1Obj = myRegistry.getResourcesMap().get("handler1", MyHandler1.class);

但是当你尝试(snippet2)时它会失败:

MyHandler1 handler1 = new ObjectMapper().convertValue(myHandler1Obj);

如果是这样,那么 Spring Boot 在这里就无关紧要了,“snippet1”工作的事实已经表明 Spring Boot 已经完成了它的工作。

现在它的对象映射器无法将通用对象转换为 MyHandler1...

为了重现它,请尝试从等式中“排除” Spring Boot 并仅检查 snippet2

这个顺便说一句可以解释为什么应用程序上下文(spring boot应用程序)启动时没有异常:如果它不能 Autowiring 某些东西,它将在启动过程中失败,但正如你所解释的那样,情况并非如此......

关于Java Spring启动: Not able to access @Bean defined in @Configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60088420/

相关文章:

java - 如何通过图中的给定路径覆盖最大数量的节点?

java - Docker-compose:/app.war 中没有主要 list 属性

java - Spring Boot-无法使用@Value检索application.yml变量值

java - 创建新模块时不允许我创建类文件

spring-boot - 如何使用 spring boot 和 websockets 制作一对一聊天应用程序

java - com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 重复项

spring-boot - 为什么 Spring Webflux 只接受 256 个并行请求?

java - 使用正则表达式从字符串中提取键值对

java - Android- fragment 内的动画

java - 如何为自定义插件修改Gradle插件{}管理存储库?