我将参与Java项目,并希望使用Spring IOC进行bean管理。
这不是一个Web项目,只是一个简单的java项目,最后会给我一个jar文件。
我的问题是,在我的应用程序中,我想使用Spring IoC来获取类的实例以调用它们各自的方法。为此,我需要使用
获取spring上下文CalenderDao calenderDao = (CalenderDao) ApplicationContextUtils
.getApplicationContext().getBean("calenderDao");
calenderDao.getCalenderUpdate();
现在如果我在其他类中也需要这个bean,我会在那里复制并粘贴相同的东西。
CalenderDao calenderDao = (CalenderDao) ApplicationContextUtils
.getApplicationContext().getBean("calenderDao");
calenderDao.getCalenderUpdate();
我的问题是,我是否需要在每个文件中创建一个ApplicationContext以在整个应用程序中获取bean。或者是否有任何替代和最好的事情要执行。如果我这样做的话,如何在应用程序中使用setter注入或构造函数注入。
在Web应用程序中,这很简单,我们只加载一次上下文,一切正常,但是如何在非web中执行此操作,我们没有web.xml文件来实例化上下文。
请使用spring帮助在非Web项目中管理bean。
答案 0 :(得分:2)
Spring不仅适用于网络应用程序。
仅仅因为它不是一个Web应用程序,你不需要回到“提供者风格”。您不需要web.xml来初始化应用程序上下文。
使用main方法创建应用程序上下文并像处理webapp一样使用bean。您可以使用自动装配和弹簧的所有小工具。
初始化上下文后,请调用主类来启动应用程序,例如在刷新事件的帮助下。从那以后,你几乎不需要使用getBean。
显然你没有会话和请求范围,但是可以使用单例和原型。
看看春季文档吧。
答案 1 :(得分:1)
在应用程序中需要ApplicationContext的任何地方,使用ApplicationContextAware
接口实现该类。
在这里说
public class CalenderService implements ApplicationContextAware{
private ApplicationContext context;//declare this so you can use it
}
因为它是界面,你需要覆盖它的方法
public void setApplicationContext(ApplicationContext context){
this.context=context; // here ApplicationContext gets injected.
}