我是我公司產品的最終用戶。它不太適合集成到Spring中,但是我能夠獲取上下文的句柄並按名稱檢索所需的bean。然而,我仍然想知道是否可以向這個類中注入一個bean,儘管這個類不是由Spring自己管理的。說明:管理某些類MyClass的生命週期的同一個應用程序也在管理Spring上下文的生命週期。 Spring沒有任何有關MyClass實例的知識,並且我想介紹一下如何將實例提供給上下文,但不能在上下文本身中創建實例。向Spring管理的上下文中注入Bean
回答
你可以ñ做到這一點:
ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
someBeanNotCreatedBySpring,
AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);
您可以使用@Autowired
等內YourClass
指定字段注入等
假設u有以下依賴關係鏈:
A - >乙 - 「ç - > X - >ý - >ž
A,B,C被彈簧管理豆類(構建和Spring框架manged) x,y是由應用程序構造非常簡單的POJO,無彈簧輔助
現在,如果你想使y將獲得到Z利用彈簧的參考,你需要有一個'處理'到春季ApplicationContext
一個辦法就是實現ApplicationContextAware接口。在這種情況下,我會建議A,B或C將實現此接口,並將applicationContext引用存儲在靜態成員中。
所以讓我們例如C級:
class C implmenets ApplicationContextAware{
public static ApplicationContex ac;
void setApplicationContext(ApplicationContext applicationContext) {
ac = applicationContext;
}
.............
}
現在,Y類,你應該有:
(Z)(C.ac.getBean("classZ")).doSomething()
HTH - Yonatan
要小心,在舊版本春天豆廠有線程安全問題http://jira.springframework.org/browse/SPR-4672
搜索自動裝配無休止的連擊注入Spring Bean注入POJO了ApplicationContextAware beanaware等圍住我回到這裏,但這沒有爲我提供一個完整的解決方案。
這是一個更好的實施/教程這個國際海事組織: 我希望它可以幫助每個人喜歡它終於幫助了我。
另一種方式做,這是我們用AspectJ。這是向使用new
運算符創建的非管理對象注入Spring Bean的推薦方式。有關詳細信息,請參閱本:
http://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
的一種方式,儘管其製造是外部帶來一個bean到Spring是使用標記爲@Configuration
Bean,它有一個方法(標有@Bean
)一個輔助類,實際上使該實例並通過Spring將其傳遞回來(此時它的屬性注入和代理生成)。
我不太清楚你所需要的範圍;與prototype
,你會在每個地方得到一個新鮮的豆。
@Configuration
public class FooBarMaker {
@Bean(autowire = Autowire.BY_TYPE)
@Scope("prototype")
public FooBar makeAFooBar() {
// You probably need to do some more work in here, I imagine
return new FooBar();
}
}
您可以將生產所需的屬性注入到@Configuration
bean中。如果你想創建一個對象外 Spring上下文,並提供用於注射該對象到(我用它來創造一個類實例的名稱在運行時定義的接口的實例。)
其他豆類是在Spring上下文是,您可以按照this article步驟。
基本上,你創建一個父應用程序上下文,並把你的外部對象到作爲一個單此父上下文。然後,您創建主應用程序上下文(例如,從xml文件),並將父應用程序上下文作爲其父項。
Object externalObject = ...
GenericApplicationContext parent = new StaticApplicationContext();
parent.getBeanFactory().registerSingleton("externalObject", externalObject);
parent.refresh();
ApplicationContext appContext = new ClassPathXmlApplicationContext(... , parent);
- 1. 向EJB3注入Spring bean
- 2. 向spring bean注入xml文件
- 3. 向Spring bean注入文件資源
- 4. 如何將Spring bean注入到Seam上下文中?
- 5. Spring bean未注入
- 6. 如何向Apache Wink注入Spring bean?
- 7. Spring管理的JSF bean
- 8. JSF 2.0的Spring bean注入
- 9. 的Spring bean字段注入
- 10. 如何避免從上下文中檢索Spring託管bean
- 11. Spring Boot中Bean管理的模式
- 12. Apache CXF spring bean未注入
- 13. 將FacesContext注入Spring bean
- 14. Spring 3不注入DAO bean
- 15. Spring bean GeoModule bean注入到RepositoryRestMvcConfiguration
- 16. 使用Spring配置文件向DAO注入特定bean
- 17. Spring上下文:組件掃描不帶註解的bean工作
- 18. 託管bean EJB注入
- 19. JSF託管bean EJB注入
- 20. 如何在線程中注入Spring Bean
- 21. nullPointerException在Spring中注入Bean時
- 22. Spring Boot:將Bean注入到HttpServlet中
- 23. Spring @Component中注入vaadin @UIScope bean @Component
- 24. 在RESTEasy資源中向測試時注入Spring bean
- 25. 將CDI上下文bean注入到現有非上下文bean中的正確方法?
- 26. Spring安全上下文和@Repository bean
- 27. Spring bean沒有被注入JSF託管bean(這是一個抽象的超類)
- 28. 關於注入的Spring bean到JSF豆
- 29. 的Spring bean注入不工作DWR
- 30. 接口的Spring bean注入對象
請澄清一下:您想通過Spring配置,Spring動態地在運行時注入bean,還是通過setter方式編程? – 2008-11-21 21:45:06
任何方法都可以。關鍵是應用程序已經創建了我想要注入一個bean的對象,所以原始對象不由Spring上下文管理。 – 2008-11-21 22:01:21
另外,可以考慮使用一個工廠方法,所以你可以把班級分成應用程序上下文並將其配置爲每一個普通的Spring bean。查看關於bean工廠的Spring參考文檔。 – cletus 2008-11-22 00:54:25