我的所有DAO都是我的applicationContext中的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");
答案 0 :(得分:1)
当您加载类似于创建新上下文的上下文时,应加载应用程序时创建的内容的副本。要访问应用程序使用的相同上下文,您可以使用以下文档中记录的几个选项: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方法。然后你可以使用它来获取你的豆子。好咖啡:))
P.S。 - 如果需要其他类中的上下文,可以将applicationContext变量传递给它们或使用相同的方法。这样,您只有1个上下文,包含您的bean。
答案 1 :(得分:1)
有了它的工作,与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");
}
感谢所有帮助人员。