簡體   English   中英

將applicationContext中的bean插入POJO

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM