特殊说明:
ContextLoaderListener: 创建的容器为父容器(applicationContext.xml)
DispatcherServlet:创建的容器为子容器(appServlet-context.xml)
1、问题:同一个类可以被子容器和父容器同时生成实例吗?
2、问题:如果一个类子容器(appServlet-context.xml)有实例,父容器(applicationContext.xml)也有实例,getBean 使用的是那个?
答案:
1、从父容器取:是父容器的实例,
2、从子容器取值:优先使用子容器的实例;子容器没有尝试去父容器取
3、问题:子容器(DispatcherServlet)支持 AOP吗?
答案:支持
注意:
1、要确保对应容器的配置文件(appServlet-context.xml/applicationContext.xml)拥有<aop:aspectj-autoproxy/> 等与AOP相关的配置
2、子容器配置的AOP 植入逻辑,对父容器无效;即配置仅对当前容器的实例有效;
本质上是因为创建实例时,因为当前容器有实现BeanPostProcessor接口的AnnotationAwareAspectJAutoProxyCreator 实例,创建bean对象时,生成了AOP代理,才具备AOP功能的。
4、问题:子容器是否支持事务?
答案:支持,同AOP,appServlet-context.xml文件必须有对应的配置
注意:
1、仅仅在appServlet-context.xml 配置<tx:annotation-driven/> ,非子容器加载的实例没有事务能力
2、在父子容器都配置 <tx:annotation-driven/>:是各自独立的事务,毫无关系。本质同AOP的原理
总结:
1、避免父子容器拥有共同的实例,是没有必要的使用方式。
常见的资源初始化、预热多次;
如果父子容器都有实例,而通过SpringUtil 的方式获取bean,就要看SpringUtil 所在的容器,来获取对应的bean,也容易混乱
2、事务一般不要放在子容器中,子容器应该仅仅存在 web相关的bean;这也间接说明@Transactional 不应该修饰controller
3、如果希望对子容器的实例拥有事务能力,需要确保<aop:aspectj-autoproxy/> 以及Aspect 配置在子容器中
http://wangxinchun.iteye.com/blog/2341197
分享到:
相关推荐
在Spring与SpringMVC的整合应用中,它们之间存在着一种特殊的父子容器关系,这种关系对于理解和优化应用的配置及管理非常重要。 首先,让我们深入理解Spring容器。Spring容器主要分为两种类型:ApplicationContext...
Spring和SpringMVC父子容器关系初窥 Spring和SpringMVC父子容器关系是一个非常重要的概念,在项目中引入Spring和SpringMVC这两个框架时,它们之间存在着父子容器关系。了解这个关系对解决包扫描问题和配置文件的...
Spring的父子容器是Spring框架中的一种高级特性,用于在同一个应用程序中管理多个独立的配置上下文。这种设计允许我们按照模块或层次结构来组织Bean,从而实现更好的代码解耦和可维护性。父子容器的核心概念在于,父...
总结起来,Spring与SpringMVC的父子容器关系是Java Web开发中的一种设计模式,它允许开发者将应用程序的不同部分分开管理,提高代码的可维护性和复用性。理解这一关系以及初始化过程对于深入掌握Spring框架和Spring ...
Spring的IOC(Inversion of Control,控制反转)容器采用父子容器结构,根容器负责全局的Bean定义,如数据源、事务管理器等,而子容器(如由`DispatcherServlet`创建的)则负责处理特定于Web的组件,如控制器、视图...
主要介绍了Springboot项目监听器失效问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
HierarchicalBeanFactory允许父子级联,这意味着可以创建父子层级关联的容器体系,子容器可以访问父容器中的bean,反之则不行。此外,ConfigurableBeanFactory接口增强了IoC容器的可定制性,允许设置类装载器、属性...
可用于分析spring mvc源码、spring mvc父子容器初始化流程、session和cookie机制、spring session等,也可以用于学习Java Web(servlet、filter、listener等)、spring源码等。 该项目使用servlet3.0规范,无web.xml...
3. **父子容器启动原理**:在"17-SpringMVC源码—父子容器启动原理深入剖析-徐庶"中,我们将揭示Spring MVC如何构建父子容器,并解释容器的启动流程。理解这一过程有助于我们优化应用的初始化性能,合理设计Bean的...
本篇我们将聚焦于"Spring学习笔记系列之三"中的关键知识点——SpringMVC的源码分析,特别是父子容器的启动原理。这个主题是理解Spring MVC工作流程、定制化配置以及优化应用程序性能的关键。 首先,我们要明白...
Spring框架则是Java开发中的一个强大依赖注入容器,它能帮助我们管理对象的生命周期和依赖关系。在Dubbo项目中,我们可以结合Spring来管理服务提供者和服务消费者的bean,实现声明式的服务引用和服务暴露。 具体...
基于父类:代理对象与目标对象是父子关系.目标不能被final修饰 修改默认代理方法: 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议...
首先,Spring框架本身是由多个模块组成的,如核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web模块等。在大型项目中,为了更好地管理代码和降低耦合度,开发者通常会将不同功能或服务...
Spring 和 SpringMVC 是父子容器的关系。Spring 容器是父容器,SpringMVC 是子容器。 子容器可以访问父容器的对象,但是在父容器里不能访问子容器的对象。也就是说在 Controller 里可以访问 Service 对象,但是在 ...
了解spring的加载机制 beanPostProcessor,beanFactoryPostProcessor 的使用 springmvc 的父子容器 aop切面说明 公司内部培训课件
3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 BeanFactory中Bean的生命周期 3.5.2 ApplicationContext中Bean的生命周期 3.6 小结 第4章 在IoC容器中装配Bean 4.1 Spring配置概述 4.1.1 Spring容器高层视图 4.1.2 基于...
- **父子容器**:支持层次化的容器结构。 - **3.5 Bean的生命周期** - **BeanFactory中Bean的生命周期**:介绍 Bean 在不同容器中的生命周期管理。 - **ApplicationContext中Bean的生命周期**:更详细地讲解 ...
此外,Spring MVC的父子上下文可以提供灵活的上下文配置,子容器可以访问父容器的bean,但父容器不能访问子容器的bean。 Spring MVC还提供了对静态资源的访问支持,如jpg、js、css文件的访问。请求映射到具体的...
- 文档中提到了一个BeanFactoryPostProcessor,这是一个Spring容器中的特殊类型Bean,可以在所有其他Bean实例化之前运行。在`EurekaServerApplication`中,它被用来移除`tomcatWebServerFactoryCustomizer`的Bean...
在Java Web开发中,Spring作为一个全功能的容器,负责管理应用中的对象(bean),提供事务控制、AOP(面向切面编程)等功能。Spring MVC是Spring框架的一部分,专门用于处理Web请求和响应,它提供了模型-视图-控制器...