加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring:如何在Webapp和Standalone程序中获取Applicatio

发布时间:2020-12-14 05:56:00 所属栏目:Java 来源:网络整理
导读:我是 Spring Framework的新手.我们想在Web应用程序中引入它(3.1),目前使用Web层中的struts,业务层中的服务外观和业务对象以及持久层中自编写的JDBC DAO(所有这些都紧密耦合!) 我创建了几个.xml配置,一个用于servlet配置,仅扫描com.mydomain.web包.另一个在
我是 Spring Framework的新手.我们想在Web应用程序中引入它(3.1),目前使用Web层中的struts,业务层中的服务外观和业务对象以及持久层中自编写的JDBC DAO(所有这些都紧密耦合!)

我创建了几个.xml配置,一个用于servlet配置,仅扫描com.mydomain.web包.另一个在服务层appContext-service.xml上扫描com.mydomain.bs和.bo包,另一个用于DAO层appContext-persistence.xml扫描.dao包.

我们有四个具有适当项目依赖性的Eclipse项目:Web,Business,Common(包含域对象,DTO,Exceptions等),DataAccess.

我想在可能的情况下使用注释,并且已经创建了一个MVC控制器,一个带接口的新服务和一个带接口的新dao,使用JDBC模板,这一切都很有效.

现在我的问题是:

>我们不能一次重写所有代码,我们在这里讨论更大的代码库.但是,如果还需要从尚未知道Spring的服务和业务对象中获取新创建的服务,我该怎么办?它们不是bean,也不是Spring创建的.我怎么能抓住我的服务bean?
>我们有几个独立的应用程序用于批处理,定期清理文件系统和数据库表等.它们由cron(UNIX cron)触发,因此有自己的JVM.考虑到不同的.xml配置,我最好如何在这里使用Spring服务?
>我的设置是否有任何意义?

感谢您的任何见解.

解决方法

>让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
    }
}

>设置独立的弹簧应用程序非常容易.只需创建一个Spring XML并连接您的bean(通过扫描/注释或XML).不建议在main方法中执行此操作,但您可以轻松地弄清楚如何在独立应用程序中进行此设置.请记住,您的应用程序本身不应该真正做很多生命周期逻辑,但让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
  }

}

>您的设置非常有意义,即使我无法直观地展示您的整个范围,您的方法也是大型模块化弹簧应用的良好起点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读