2014-10-27 61 views
0

我们知道,@Autowired只能在弹簧容器管理的,如果新实例的实例使用,@Autowired成员也不会影响。如何在春季启动使用@Autowired手动新实例

但我认为在某些情况下,新的实例是不能避免的。

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

所以我想知道如何获得ApplicationContext Spring Boot,所以我可以通过context.getBean()得到bean。

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

我想在任何地方获得ApplicationContext。

任何帮助将不胜感激。

回答

2

我想在任何地方获得ApplicationContext。

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

为什么不能将DAOService注入到创建RunnableTask的东西?

+0

因为RunnableTask是由我自己创建的,不是由Spring管理的。所以'@ Autowired'不能被自动装配。 @Dave – NingLee 2014-10-27 12:01:39

+3

是的,但如果您自己创建它,则不需要自动装配,只需将其注入构造函数(或setter)即可。 – 2014-10-27 12:07:39

+0

感谢您的回答,这对我非常有用。但是在CodeReview SE中我还是问了一个问题。你可以看看吗?谢谢。[Spring Boot中的Bean管理](http://codereview.stackexchange.com/questions/68139/patterns-about-bean-management-in-spring-boot)@Dave – NingLee 2014-10-28 03:55:11

2

如何使用由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); 
    } 
} 
+0

我发现你有更多不错的内容 - 当你写更多的问题时,你可能想要更谨慎一些---另一方面,欢迎来到“upvote privilege”;-) – GhostCat 2018-01-16 11:28:00