`
8821249
  • 浏览: 68750 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring笔记(十一)Introduction引入

阅读更多
一、在不修改目标对象的源代码的情况下,为目标对象增加方法和属性。

二、实现方法
  1、我们要将新增加的方法声明放在新的接口中。
public interface IOtherBean {
	
	public void doOther();
}

  2、编写引入类,实现拦截器IntroductionInterception和新方法接口。
public class SomeBeanIntroductionInterceptor implements IOtherBean, IntroductionInterceptor {

	public void doOther() {
		System.out.println("doOther!");
	}

	public Object invoke(MethodInvocation invocation) throws Throwable {
		
		//判断调用的方法是否为指定类中的方法
		if ( implementsInterface(invocation.getMethod().getDeclaringClass()) ) {
			return invocation.getMethod().invoke(this, invocation.getArguments());
		}
		
		return invocation.proceed();
	}
	
	/**
	 * 判断clazz是否为给定接口IOtherBean的实现
	 */
	public boolean implementsInterface(Class clazz) {
		
		return clazz.isAssignableFrom(IOtherBean.class);
	}
}

  3、配置引入类。
    a、将拦截器实现和新方法接口名注入到DefaultIntroductionAdvisor中。
    b、只能用构造器注入。
	<!-- 通知者,只能以构造器方法注入-->
	<bean id="introductionAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
		<constructor-arg ref="someBeanAdvice" />
		<constructor-arg value="aop.spring.introduction.IOtherBean" />	
	</bean>


	<!-- 目标对象 -->
	<bean id="someBeanTarget" class="aop.spring.introduction.SomeBeanImpl" />
	
	<!-- 通知 -->
	<bean id="someBeanAdvice" class="aop.spring.introduction.SomeBeanIntroductionInterceptor" />
	
	<!-- 通知者,只能以构造器方法注入-->
	<bean id="introductionAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
		<constructor-arg ref="someBeanAdvice" />
		<constructor-arg value="aop.spring.introduction.IOtherBean" />	
	</bean>
		
	<!-- 代理 (将我们的切面织入到目标对象)-->
	<bean id="someBeanProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
		<!-- 若目标对象实现了代理接口,则可以提供代理接口的配置 -->
		<property name="proxyInterfaces"  value="aop.spring.introduction.ISomeBean" />
		<!-- 配置目标对象 -->
		<property name="target" ref="someBeanTarget" />
		<!-- 配置切面 -->
		<property name="interceptorNames">
			<list>
				<value>introductionAdvisor</value>
			</list>
		</property>
	</bean>

详细配置信息


三、原理

  1、用户调用方法时,拦截器IntroductionInterception将方法拦截,判断所调用方法是否为新方法接口里的方法。如果为true,则会让其去调用该方法是实现,否则让其去继续调用原先的方法。
  2、在性能上有缺陷所以应该尽量少用。
分享到:
评论

相关推荐

    SPRING 笔记SPRING 笔记

    SPRING 笔记SPRING 笔记SPRING 笔记

    spring笔记.pdf

    spring笔记spring基础笔记

    spring笔记.md

    spring入门笔记

    Spring笔记.doc

    2. 自动方式:引入 Spring 的 Web 包和 Struts 的 Spring 插件,配置监听器和应用上下文路径,让 Struts 从 Spring 容器中查找 Action 类,实现单例化,提高效率。 监听器如 ContextLoaderListener 在项目启动时...

    达内,tarena,spring笔记,springPPT课件,达内spring笔记

    达内教育(Tarena)作为知名的IT培训机构,提供了这套Spring的学习资料,包括笔记和PPT课件,旨在帮助学员全面掌握Spring的核心概念和技术。 Spring笔记可能涵盖了以下内容: 1. **IoC(Inversion of Control)容器...

    尚硅谷Spring笔记

    尚硅谷Spring笔记

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    spring笔记

    Spring 笔记 Spring 是 Java 企业版(Java EE)应用程序的框架,提供了结构化的配置文件,实现了控制反转(IoC)和面向切面编程(AOP),支持表现层、业务逻辑层和持久层。Spring 的核心是 IoC 和 AOP,能够与主流...

    Spring笔记 狂神说

    spring笔记 狂神说

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring笔记示例源代码

    "Spring笔记示例源代码"这个资源很可能是为了帮助学习者深入理解Spring框架的各种功能和用法而提供的实际代码示例。 1. **Spring IoC**:IoC是Spring的核心特性,它将对象的创建和管理权交给Spring容器,使得开发者...

    spring 笔记

    spring 初学 笔记 入门提示

    Spring学习笔记( spring视频笔记)

    Spring学习笔记( spring视频笔记)

    尚硅谷Spring6的笔记

    尚硅谷Spring6的笔记

    【狂神说】Spring全面详细笔记.md

    2. **轻量级和非侵入式**:引入Spring框架并不会对现有的应用程序结构产生显著影响,因为它并不强制开发者遵循特定的设计模式或者架构风格。 3. **控制反转(IoC)**:通过将对象的创建权交给Spring容器,减少了代码...

    Spring学习笔记(马士兵spring视频笔记).doc

    Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc

    尚硅谷周阳老师SpringCloud笔记

    【尚硅谷周阳老师SpringCloud笔记】是一份深入学习SpringCloud技术体系的教程资源,由知名教育机构尚硅谷的周阳老师编撰。SpringCloud作为微服务架构的重要框架,广泛应用于现代企业的分布式系统开发中。这份笔记...

    spring笔记.rar

    《Spring框架深度解析——基于传智播客左慈老师培训笔记》 在Java开发领域,Spring框架无疑是最具影响力和广泛使用的轻量级框架之一。它以其强大的功能、灵活的设计和丰富的生态系统,成为了企业级应用开发的首选。...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

Global site tag (gtag.js) - Google Analytics