如何在Spring Boot手动新实例中使用@Autowired

时间:2014-10-27 11:50:25

标签: spring-boot autowired applicationcontext

我们知道,@Autowired只能在spring容器管理的实例中使用,如果你是新实例,并且其中的@Autowired成员不会生效。

但我认为在某些情况下,新的实例无法避免。

如RunnableTask。其中包含由spring管理的DAOService。因为该任务是手动新的。所以我不能在ThreadTask中使用DAOService。

所以我想知道如何在 Spring Boot 中获取ApplicationContext,因此我可以通过context.getBean()获取bean。

我在main()中知道我可以自动连接ApplicationContext。但我无法将上下文作为参数传递到任何地方!

我想在任何地方获取ApplicationContext。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

如何使用spring管理的工厂对象?

class TheBeanYouWant {
    private Integer beanSupposeToAutowired;

    public TheBeanYouWant(Integer bean) {
        this.beanSupposeToAutowired = bean;
    }
}

@Component
class TheBeanFactory {
     @Autowired
     private Integer beanAutowired;

     public TheBeanYouWant  newBean() {
           return new TheBeanYouWant(beanAutowired);
     }
}

答案 1 :(得分:2)

  

我想在任何地方获取ApplicationContext。

这是一种反模式。尽量避免它。

为什么不能将DAOService注入创建RunnableTask的内容?