![](/img/trans.png)
[英]Why is an @Autowire null in a bean retrieved from ApplicationContext?
[英]Insert bean from applicationContext into POJO
我在applicationContext中將所有DAO都作為bean。 現在,這非常適合將這些對象自動裝配到我的控制器中以進行數據庫調用。 但是,鑒於我在我的一些POJO中嵌入了對象(例如:用戶類具有pendingsurvey對象列表,約會對象列表等),並且當我抓住主對象時不想抓取這些嵌入對象(例如:在一個包含用戶列表的頁面中,我不需要知道他們的pendingsurveys或約會),我已經設置好了,如果嵌入對象為null,請轉到數據庫獲取數據。 然而,顯然@Autowire在這種情況下不起作用,因為POJO不是Spring控制的對象或其他東西。
現在的問題是,如何從applicationContext中獲取bean以在我的POJO中使用? 我對Spring不是那么好,所以具體的說明將不勝感激..
我試過這個,但它給了我一堆注入依賴錯誤:
/* applicationContext.xml */
<bean id="userDao" class="UserDao" scope="singleton">
<property name="connectionWrapper" ref="connectionWrapper" />
</bean>
/* User.java - I tried putting in constructor and in the getter for userDao */
ApplicationContext ctx = AppContext.getApplicationContext('applicationContext.xml');
UserDao userDao = (UserDao) ctx.getBean("userDao");
當您加載類似於創建新上下文的上下文時,會復制加載應用程序時創建的內容。 要訪問應用程序使用的相同上下文,您有幾個選項,請在此處記錄: http : //mythinkpond.wordpress.com/2010/03/22/spring-application-context/
為了便於訪問,我將復制/粘貼您最想要使用的那個:
public class MyClass implements ApplicationContextAware {
static final long serialVersionUID = 02L;
ApplicationContext applicationContext = null;
public void doSomething(){
if (applicationContext != null && applicationContext.containsBean("accessKeys")){
MyBean beanA = (MyBean) applicationContext.getBean("mybean");
//Do something with this AccessBean
}
return null;
}
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
System.out.println("setting context");
this.applicationContext = applicationContext;
}
}
請注意implements ApplicationContext
。 這告訴Spring框架你需要在這個類中使用Application Context。所以它將它自動裝入applicationContext變量。 為此,您還需要setter方法。 然后你可以使用它來獲取你的豆子。 好咖啡:)
PS - 如果需要其他類中的上下文,可以將applicationContext變量傳遞給它們或使用相同的方法。 這樣,您只有1個上下文,包含您的bean。
得到它的工作,與Ric Jafe的答案相同的概念,但不同的實現(來源: http ://blog.jdevelop.eu/?p = 154):
上課:
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext ctx = null;
public static ApplicationContext getApplicationContext() {
return ctx;
}
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
// Assign the ApplicationContext into a static method
this.ctx = ctx;
}
}
將此行添加到applicationContext.xml中:
<bean id="applicationContextProvider" class="org.ApplicationContextProvider"></bean>
在我的POJO中調用它:
ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext();
if (applicationContext != null && applicationContext.containsBean("keyName")) {
object = (Object) applicationContext.getBean("keyName");
}
感謝所有幫助人員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.