2009-08-11 20 views
0

如何手動拉動spring bean?我有一個相當大的Web應用程序,並且在給定的服務中,臨時對象需要訪問特定於計算機的bean(數據庫連接信息)。由於應用程序在羣集中運行,因此此瞬態對象(可能會在服務器之間彈跳)總是需要從當前的spring上下文和服務器獲取正確的連接。手動拉彈簧豆的最佳方式?

那麼,什麼是從春季手工拉豆的最佳方式?

回答

1

你可以讓你的服務實現ApplicationContextAware,這樣你就可以訪問ApplicationContext本身並且可以直接調用getBean()。

2
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 

Object o = ctx.getBean("dataSource"); 

當然,你可以投豆這樣的:

DataSource d = (DataSource) ctx.getBean("dataSource"); 
+1

我在域模型,但它是一種服務/域類型的混合爲我的具體需要。有沒有什麼辦法讓ServletContext在我的深層深層的服務層上徘徊? – 2009-08-12 00:10:46

1

我建議你試圖將其拉入你的域對象「上創建」對象的注入。這意味着只要你的域對象在特定的服務器上創建,它就會被注入正確的(特定於計算機的)bean。

+0

你如何做到這一點? – 2009-08-12 17:18:15

+0

雖然這並沒有真正的幫助,但當域對象被移動到另一臺服務器時信息發生了變化。 – 2009-08-12 17:18:56

+0

是的,它確實......當bean「移動」到另一臺服務器時,它在那裏被重新創建。一旦創建它將注入另一個bean。閱讀關於Spring和AOP – 2009-08-12 17:35:38

0

它需要獲取數據庫連接信息?如何在JNDI and look it up in the bean中存儲連接?假設你的服務器提供它。

+0

這將是不必要的網絡流量。所有信息在域對象爲 – 2009-08-12 00:40:03

+0

的服務器上是已知的。JNDI與網絡無關......它基本上是將一個對象存儲在可以在服務器上查找的已知名稱下。 – Nate 2009-08-12 02:33:54

+0

至少在這種情況下:P – Nate 2009-08-12 02:35:58