繁体   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