摘要:父子容器总的上下文容器有父子之分。父容器和子容器。使用场景父子容器的主要用途之一便是是上下文隔离。假设的上下文配置文件为,实现方法如下。说明,其中,为父容器,为子容器。
本文由作者张远道授权网易云社区发布。
spring父子容器
spring总的上下文容器有父子之分。父容器和子容器。父容器对子容器可见,子容器对父容器不可见。
对于传统的spring mvc来说,spring mvc容器为子容器,也就是说ServletDispatcher对应的容器为子容器,而web.xml中通过ConextLoaderListener的contextConfigLocation属性配置的为父容器。
使用场景
父子容器的主要用途之一便是是上下文隔离。考虑以下一种场景。
project-service.jar为服务层模块。包含一些数据库service方法。起对应的spring配置文件为project-service.xml。 project-api为api服务器代码。它依赖于project-service.jar。 但是,project-api需要对project-service里的某些方法进行decorate,进行装饰,比如给CustomerService进行装饰。装饰后的类为CachedCustomerService。于是,现在project-api里面包含两个CustomerService,一个是来自project-service的CustomerService,另一个是CachedCustomerService。这个时候,如果project-api工程所有的配置文件都通过一个上下文进行加载,势必出现问题。因为,project里的PayService里通过@Resource标准注入了CustomerService,类似如下
@Serivcepublic class PayService{@Resourceprivate CustomerService cusService;
}
这时,由于上下文在注入customerService属性的时候,遇到了两个CustomService。它无法判读注入哪个Service。 当然了,有人会说,改一下PayService的Resource属性,指定下具体注入哪个。但是,project-service.jar是第三方库的话,改动代码变得不可行,除非拿到源码。
配置父子容器
这个时候,就可以通过父子容器的方式解决这个问题。 将project-service放在父容器中,project-api所有的bean用子容器加载。
假设project-api的上下文配置文件为project-api.xml,实现方法如下。
1、定义project-total.xml
classpath:project-service.xml classpath:project-api.xml
2、在web.xml的上下文配置中如下。
contextConfigLocation classpath*:project-total.xml org.springframework.web.util.Log4jConfigListener org.springframework.web.context.ContextLoaderListener
说明,其中,serviceContext为父容器,apiContext为子容器。在apiContext扫描路径里的任务bean都对serviceContext不可见。从而达到隔离的目的
参考列表
http://springtips.blogspot.co...
http://docs.spring.io/autorep...
更多网易技术、产品、运营经验分享请访问网易云社区。
文章来源: 网易云社区
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25331.html
摘要:目前建议使用与。入參是当前正在处理的,是当前的配置名,返回的对象为处理后的。如果,则将放入容器的缓存池中,并返回。和这两个接口,一般称它们的实现类为后处理器。体系结构让容器拥有了发布应用上下文事件的功能,包括容器启动事件关闭事件等。 点击进入我的博客 1 如何理解IoC 1.1 依然是KFC的案例 interface Burger { int getPrice(); } in...
摘要:现在给定一个项目的包结构在中有以下配置只扫描注解可以看出要把最后的包写上,不能包含子包,所以不能写成。 大家好,我是猪弟,猪在我心中从来不是蠢的代名词,而是懒的代名词,本次准备记录一个在开发测试过程中遇到的问题,跟踪了三天spring和第三方RPC组件的源码,最终发现了问题是因为第三方组件没有处理好而父子容器导致的,还有一个因素是spring注解扫描重叠。 Spring版本:4.3...
摘要:在这一步里,将配置文件的信息装入到容器的定义注册表中,但此时还未初始化。注册后处理器根据反射机制从中找出所有类型的,并将它们注册到容器后处理器的注册表中。是属性编辑器的注册表,主要作用就是注册和保存属性编辑器。 点击进入我的博客 1 Spring容器整体流程 1.1 ApplicationContext内部原理 AbstractApplicationContext是Applicati...
摘要:事件事件监听器,对监听到的事件进行处理。拥有一个成员变量,提供了容器监听器的注册表。注册事件监听器根据反射机制,使用的方法,从中找出所有实现的,将它们注册为容器的事件监听器,实际的操作就是将其添加到事件广播器所提供的监听器注册表中。 1. Spring的资源抽象接口 假如有一个文件位于Web应用的类路径下,用户可以通过以下方式对这个文件资源进行访问: 通过FileSystemReso...
摘要:服务雪崩效应是一种因服务提供者的不可用导致服务消费者的不可用并将不可用逐渐放大的过程。这种代理能够记录最近调用发生错误的次数,然后决定使用允许操作继续,或者立即返回错误。这个自己持有的上下文默认实现类也是。 本篇集成Hystrix,继续搭建demo。 雪崩效应:在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为...
阅读 1240·2021-11-23 09:51
阅读 3376·2021-09-06 15:00
阅读 958·2021-08-16 10:57
阅读 1353·2019-08-30 12:46
阅读 910·2019-08-29 12:22
阅读 1544·2019-08-29 11:07
阅读 3124·2019-08-26 11:23
阅读 2965·2019-08-23 15:14