我使用Spring Boot MVC应用程序。
我有一个@Configuration
类,使用ApplicationContext
将bean初始化为@Bean
。
我有一个@Controller
类,我试图使用@Autowired
注释自动装配bean。
结果:@Autowired
字段为null
。
DEBUG:我试图调试以查看执行顺序。我期望看到用@Configuration
注释的类将首先运行以将bean初始化为应用程序上下文。但是,控制器类首先被实例化。然后接下来调用@Bean
配置类的方法。由于这个bean在控制器之后被实例化,这就是Controller没有得到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);
}
}
答案 0 :(得分:3)
我找到了两个解决方法。两种解决方案都有 1.使用@Resource而不是@Autowired将bean注入控制器。 2.对Configuration类中使用@Bean注释的方法使用@PostConstruct。
注意:您不必进行这两项更改。他们中的任何一个都应该工作。