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

时间:2016-09-24 04:58:32

标签: spring configuration controller javabeans autowired

我使用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);
    }
}

1 个答案:

答案 0 :(得分:3)

我找到了两个解决方法。两种解决方案都有 1.使用@Resource而不是@Autowired将bean注入控制器。 2.对Configuration类中使用@Bean注释的方法使用@PostConstruct。

注意:您不必进行这两项更改。他们中的任何一个都应该工作。