2014-10-27 57 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