春季:如何让应用程序上下文的保持在的webapp和独立程序(Spring: how to get h

2019-07-30 15:19发布

我是新来的Spring框架。 我们希望在Web应用程序介绍它(3.1),目前使用在网络层和持久层的支柱,服务外墙和业务层业务对象自己编写JDBC的DAO(这一切紧密耦合!)

我创建了几个.XML配置,一种用于servlet配置中,只有扫描com.mydomain.web包。 另一个上的服务层appContext-service.xml中,其扫描com.mydomain.bs和.bo包和一个用于DAO层appContext-的persistence.xml扫描.dao包。

我们有合适的项目依赖4个Eclipse项目:网络,业务,普通(包含域对象,DTO的,异常等),数据访问。

我想尽可能使用注释和已经创建了一个MVC控制器,具有接口的新服务,并与接口的新道,使用JDBC模板,而这一切的伟大工程。

现在,我的问题是:

  1. 我们不能重新编写所有的代码同时,我们在这里谈论的是一个更大的代码库。 但是,我该怎么办,当也从服务和不属于业务对象所需要的新创建的服务(还)春知道? 他们不是豆类或不被春创建。 我将如何得到我的服务豆持有?

  2. 我们有一批处理几个独立的应用程序,定期清理文件系统和数据库表等,他们是由cron(UNIX的cron),因此有自己的JVM触发。 我在这里最好使用Spring的服务,怎么会给出不同的.xml配置?

  3. 请问我的设置作任何意义可言?

感谢您的任何见解。

Answer 1:

  1. 这是很常见的是一个让Spring处理所有的bean的生命周期,否则可能会有点棘手。 未的Spring Bean对象初始化希望的地方。 作出这样的初始化一个Spring bean,并使其应用情境感知

      public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext = null; public static ApplicationContext getApplicationContext() { return applicationContext; } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public void init(){ ServiceBean1 srv1 = (ServiceBean1)applicationContext.getBean("serviceBean1"); myNonSpringObject.setService1(srv1); // Or something } } 
  2. 建立一个独立的弹簧应用程序是很容易的。 只要创建一个Spring XML和接线你的bean(无论是通过扫描/注释或XML)。 这并不推荐这样做的主要方法,但你可以很容易地找出如何得到这个设置在独立的应用程序。 请记住,你的应用程序本身应该没有真正做多周期逻辑,让Spring这样做。

     public class StandaloneSpringApp{ public static void main(String[] args){ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); SomeBeanType bean = (SomeBeanType)ctx.getBean("SomeBeanName"); bean.doProcessing(); // or whatever } } 
  3. 你的设置是非常合情合理的,即使我不能想像你的整个范围,你的做法是对大型模块化的Spring应用程序一个很好的起点。



文章来源: Spring: how to get hold of Application context in Webapp and Standalone program