gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:40:48 25 4
gpt4 key购买 nike

我在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com