Spring - 父容器与子容器

Posted ~风铃~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring - 父容器与子容器相关的知识,希望对你有一定的参考价值。

一、Spring容器(父容器)

 

  1、Mapper代理对象
  2、Service对象

 

二、Springmvc(前端控制器)(子容器)


       Controller对象


        1.标准的配置是这样的:Controller只在SpringMVC的配置文件扫描。Service等只在Spring容器的配置文件配置扫描。
        2.Spring中也可以扫描Controller,但是使用时还是使用的SpringMVC自己的(自己没有配置,那么不能用),造成对象冗余,而且使用时事务控制可能有问题。
        3.SpringMVC中也可以配置扫描Service等,也造成冗余,而且使用时事务控制可能有问题。

       通过Value注入时,在Controller中不能使用注入属性,因为Controller是子容器控制的。


          除非在spring-mvc.xml中也加入配置:
          <!-- 加载文件上传路径配置文件 解决@controller 中无法注入配置文件中的属性 -->
           <context:property-placeholder location="classpath*:file.properties"/>


三、总结

 

  1、避免父子容器拥有共同的实例,是没有必要的使用方式。

    常见的资源初始化、预热多次;如果父子容器都有实例,而通过SpringUtil 的方式获取bean,就要看SpringUtil 所在的容器,来获取对应的bean,也容易混乱

  2、事务一般不要放在子容器中,子容器应该仅仅存在 web相关的bean;这也间接说明@Transactional 不应该修饰controller

  3、如果希望对子容器的实例拥有事务能力,需要确保<aop:aspectj-autoproxy/> 以及Aspect 配置在子容器中

 












以上是关于Spring - 父容器与子容器的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 初始化源码—DispatcherServlet与子容器的初始化以及MVC组件的初始化一万字

spring父子容器的问题

spring父子容器

高效开发:Spring和SpringMVC的父子关系

高效开发:Spring和SpringMVC的父子关系

[转]Spring IOC父子容器简介