【发布时间】:2017-02-02 00:25:47
【问题描述】:
我使用 Spring Boot MVC 应用程序。
我有一个@Configuration 类,它使用@Bean 将一个bean 初始化为ApplicationContext。
我有一个 @Controller 类,我正在尝试使用 @Autowired 注释将 bean 自动装配到该类中。
结果:@Autowired 字段为 null。
DEBUG:我尝试调试以查看执行顺序。我期待看到带有 @Configuration 注释的类将首先运行以将 bean 初始化到应用程序上下文中。但是,控制器类首先被实例化。然后接下来调用配置类的@Bean 方法。由于这个 bean 是在控制器之后实例化的,这就是控制器没有自动装配 bean 的原因。
问题:如何让@Configuration@Bean方法在控制器类实例化之前执行?
配置类代码:
@Configuration
public class RootConfiguration2 {
@Autowired
private IService<ActBinding> bindingService;
@Bean
public Map<String, String> getBingindNameToRoutingKeyMap() throws Exception {
ListOperation<ActBinding> operation = ListOperation.from("key", "name", "exchangeId");
operation.sort("key", SortOrder.Ascending);
Iterable<ActBinding> result = bindingService.list(operation).getResult();
Map<String, String> bindingNameToRoutingKey = new HashMap<>();
result.forEach(x -> bindingNameToRoutingKey.put(x.getName(), x.getKey()));
return Collections.unmodifiableMap(bindingNameToRoutingKey);
}
}
【问题讨论】:
-
能分享一下配置类代码吗?
-
开启日志并检查警告信息。
-
您必须显示 IService
的代码以及注入 getBingindNameToRoutingKeyMap 的位置。尽管您没有提到此类错误,但它可能是循环依赖。当注入 getBingindNameToRoutingKeyMap 与 @Autowring(required=false) 配对时,可能会出现拼写错误...需要更多代码。
标签: spring configuration controller javabeans autowired