spring:如何掌握Webapp和独立程序中的应用程序上下文
我是Spring框架的新手。我们想在Web应用程序中引入它(3.1),当前在Web层中使用Struts,在业务层中使用服务Facade和业务对象,在持久性层中使用自写的JDBC
DAO(所有这些都紧密耦合!)
我创建了几个.xml配置,一个用于servlet配置,仅扫描com.mydomain.web软件包。服务层appContext-
service.xml上的另一个扫描com.mydomain.bs和.bo包,DAO层appContext-
persistence.xml的另一个扫描.dao包。
我们有四个具有适当项目依赖关系的Eclipse项目:Web,Business,Common(包含域对象,DTO,Exception等),DataAccess。
我想尽可能使用注释,并且已经使用JDBC模板创建了MVC控制器,带有接口的新服务和带有接口的新dao,它们都很好用。
现在我的问题是:
我们无法一次重新编写所有代码,我们在这里谈论的是更大的代码库。但是,当还需要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应用非常容易。只需创建一个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
}
}
您的设置非常合理,即使我无法看到您的整个范围,您的方法也是大型模块化弹簧应用的良好起点。
以上是 spring:如何掌握Webapp和独立程序中的应用程序上下文 的全部内容, 来源链接: utcz.com/qa/404436.html