大连建设工程招聘信息网站,无锡做网站的公司,上海公司注册多久可以拍牌,网站开发的需求分析书为什么80%的码农都做不了架构师#xff1f; 最近在做项目时牵扯到有关父子上下文的概念。 何为父子上下文呢#xff1f; 父上下文#xff1a; 使用listener监听器来加载配置文件#xff0c;如下#xff1a; listener listener-classorg.… 为什么80%的码农都做不了架构师 最近在做项目时牵扯到有关父子上下文的概念。 何为父子上下文呢 父上下文 使用listener监听器来加载配置文件如下 listener listener-classorg.springframework.web.context.ContextLoaderListener/listener-class
/listener Spring 会创建一个WebApplicationContext上下文称为父上下文父容器保存在 ServletContext中key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值。 可以使用Spring提供的工具类取出上下文对象WebApplicationContextUtils.getWebApplicationContext(ServletContext); 子上下文 使用Spring MVC 来处理拦截相关的请求时会配置DispatchServlet servletservlet-namedispatcherServlet/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-value/WEB-INF/applicationContext-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup
/servletservlet-mappingservlet-namedispatcherServlet/servlet-nameurl-pattern//url-pattern
/servlet-mapping 每个DispatchServlet会有一个自己的上下文称为子上下文它也保存在 ServletContext中key 是org.springframework.web.servlet.FrameworkServlet.CONTEXTServlet名称。当一 个Request对象产生时会把这个子上下文对象WebApplicationContext保存在Request对象中key是 DispatcherServlet.class.getName() .CONTEXT。 可以使用工具类取出上下文对象RequestContextUtils.getWebApplicationContext(request); 父上下文父容器和子上下文子容器的访问权限 子上下文可以访问父上下文中的bean但是父上下文不可以访问子上下文中的bean。 父上下文使用与否 方案一传统型 父上下文容器中保存数据源、服务层、DAO层、事务的Bean。 子上下文容器中保存Mvc相关的Action的Bean. 事务控制在服务层。 由于父上下文容器不能访问子上下文容器中内容事务的Bean在父上下文容器中无法访问子上下文容器中内容就无法对子上下文容器中Action进行AOP事务。 当然做为“传统型”方案也没有必要这要做。 方案二激进型 Java世界的“面向接口编程”的思想是正确的但在增删改查为主业务的系统里Dao层接口Dao层实现类Service层接口Service层实现类Action父类Action。再加上众多的O(vo\po\bo)和jsp页面。写一个小功能 7、8个类就写出来了。 开发者说我就是想接点私活儿和PHPASP抢抢饭碗但我又是Java程序员。最好的结果是大项目能做好小项目能做快。所以“激进型”方案就出现了-----没有接口、没有Service层、还可以没有众多的O(vo\po\bo)。那没有Service层事务控制在哪一层只好上升的Action层。 本文不想说这是不是正确的思想我想说的是Spring不会限制你这样做。 由于有了父子上下文你将无法实现这一目标。解决方案是只使用子上下文容器不要父上下文容器 。所以数据源、服务层、DAO层、事务的Bean、Action的Bean都放在子上下文容器中。就可以实现了事务注解事务就正常工作了。这样才够激进。 总结不使用listener监听器来加载spring的配置文件只使用DispatcherServlet来加载spring的配置不要父子上下文只使用一个DispatcherServlet事情就简单了什么麻烦事儿也没有了。 Java--大项目能做好--按传统方式做规规矩矩的做好扩展好维护。 Java--小项目能做快--按激进方式做一周时间就可以出一个版本先上线接受市场(用户)的反馈再改进再反馈时间就是生命(成本)。 转载于:https://my.oschina.net/jast90/blog/282773