Spring @Bean方法在@Autowired之后执行



我使用Spring Boot MVC应用程序。我有一个@Configuration类,它使用@Bean将bean初始化为ApplicationContext。我有一个@Controller类,我试图使用@Autowired注释自动连接bean。

Result: @Autowired field is 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);
    }
}

我找到了两种解决方法。这两种解决方案都奏效了:1. 使用@Resource代替@Autowired将bean注入到控制器中。2. 在Configuration类中用@Bean注释的方法上使用@PostConstruct。

注意:你不必做这两项更改。

最新更新