【问题标题】:Spring NON MVC project configuration - Best PracticesSpring NON MVC 项目配置——最佳实践
【发布时间】:2014-03-30 09:02:43
【问题描述】:

我将从事一个 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.xml 文件来实例化上下文的非网络中执行此操作。

请帮助如何使用 spring 在非 web 项目中管理 bean。

【问题讨论】:

    标签: java spring ioc-container


    【解决方案1】:

    Spring 不仅仅是为 Web 应用程序设计的。

    仅仅因为它不是一个网络应用程序,你不需要回退到“提供者风格”。您不需要 web.xml 来初始化应用程序上下文。

    使用您的 main 方法来创建应用程序上下文并使用您的 bean,就像您为 webapp 所做的那样。您可以使用自动装配和 spring 的所有小工具。

    一旦上下文被初始化,调用你的主类来启动你的应用程序,例如在刷新事件的帮助下。从那里你(几乎)不需要使用 getBean。

    显然你没有 session 和 request 范围,但是可以使用单例和原型。

    看看 spring 文档。

    【讨论】:

      【解决方案2】:

      无论您在应用程序中的何处需要 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.
      }
      

      【讨论】:

        猜你喜欢
        • 2014-06-26
        • 2015-09-11
        • 2015-04-19
        • 2011-05-18
        • 2017-08-24
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 2018-03-03
        相关资源
        最近更新 更多