Spring NON MVC项目配置 - 最佳实践

时间:2014-02-27 05:40:19

标签: java spring ioc-container

我将参与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。

2 个答案:

答案 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.
}