`
yxfei
  • 浏览: 5099 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

SpringAOP拦截器的代理机制

 
阅读更多

要使用方法名匹配AOP切面编程,需要使用到Spring中的org.springframework.aop.support.NameMatchMethodPointcutAdvisor这个类,advice属性定义一个通告类,mappedName定义通告类针对的方法,通告的类需要实现一些特定的接口在特定的时候执行:

MethodBeforeAdvice :方法之前执行

AfterReturningAdvice:方法之后执行

继承 ThrowsAdviceInterceptor:抛出异常之后执行

AOP代理类通过org.springframework.aop.framework.ProxyFactoryBean实现,属性target定义需要进行通告的类或接口,属性interceptorNames定义拦截使用的类,返回字符串数组,这样就基本实现了AOP代理。配置如下:

<bean id="methodBeforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
		<property name="advice">
			<bean class="com.yxfei.advice.MyBeforeAdvice"></bean>
		</property>
		<property name="mappedName">
			<value>*</value>
		</property>
	</bean>
	<bean id="methodAfterAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
		<property name="advice">
			<bean class="com.yxfei.advice.MyAfterAdvice"></bean>
		</property>
		<!-- 拦截方法匹配 -->
		<property name="mappedName">
			<value>hello*</value>
		</property>
	</bean>
	
	<bean id="myService" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="interceptorNames">
			<list>
				<value>methodBeforeAdvisor</value>
				<value>methodAfterAdvisor</value>
			</list>
		</property>
		<property name="target">
			<bean class="com.yxfei.pointcut.MyPointCut"></bean>
		</property>
	</bean>

 

其中com.yxfei.advice.MyBeforeAdvice实现org.springframework.aop.MethodBeforeAdvice接口,而com.yxfei.advice.MyAfterAdvice实现org.springframework.aop.AfterReturningAdvice接口,ProxyFactoryBean只能拦截到一个目标中,如果要实现拦截多个类,则需要使用
org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator,属性beanNames配置多个类,返回String数组,通配符*Dao,表示名为Dao结尾的所有类进行拦截。实现代码如下:

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   
       <property name="beanNames">   
           <list>   
               <value>*Dao</value>  
           </list>   
       </property>   
       <property name="interceptorNames">   
           <list>   
               <value>transactionInterceptor</value>   
           </list>   
       </property> 

 

分享到:
评论

相关推荐

    详解Spring AOP 拦截器的基本实现

    具体到Spring AOP拦截器的代码实现,本文通过创建TestInterceptor类来演示。这个类继承自HandlerInterceptorAdapter,然后重写其中的afterCompletion、postHandle等方法。在这个类中,可以在相应方法中添加自定义的...

    spring aop 拦截器简单实现

    Spring AOP(面向切面编程)是Spring框架中的一个重要特性,它允许我们在不修改源代码的情况下,通过代理机制对程序进行扩展和增强。本例提供了一个简单的AOP拦截器实现,我们可以从这个基础出发,深入理解和探讨AOP...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    例如,可能会有一个自定义的MyBatis拦截器用于分页查询,一个Spring AOP切面用于记录操作日志,Spring事务管理确保数据的一致性,而反射工具类可能用于动态加载配置或处理某些通用的反射任务。通过这些组件的组合,...

    Spring Boot Aspect 切面 AOP 拦截器 Interceptor 监控control请求耗时

    在Spring Boot应用中,...综上所述,Spring Boot的AOP和拦截器机制为我们提供了一种灵活的方式来增强和监控应用程序的行为。通过正确地配置和使用拦截器,我们可以实现对控制层的精细控制,提高系统的可维护性和性能。

    在自定义spring aop中使用el获取拦截方法的变量值。

    这通常涉及到Spring的代理机制、AOP的切面定义、方法调用上下文以及EL的语法和功能。 Spring AOP是Spring框架的一个重要特性,它允许开发者创建具有横切关注点的模块,如日志记录、事务管理等。这些关注点可以被...

    JDK动态代理 spring aop 的原理

    总的来说,JDK动态代理是Spring AOP实现的基础,它允许我们在运行时动态创建代理对象,实现对方法调用的拦截和增强。Spring AOP则在此基础上提供了更高级的抽象,让我们可以方便地定义和管理切面,从而实现更灵活的...

    Spring AOP四种创建通知(拦截器)类型

    ### Spring AOP 四种创建通知(拦截器)类型详解 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块,它提供了在应用代码中添加横切关注点的能力,如日志记录、事务管理、权限...

    spring AOP依赖三个jar包

    Spring AOP和其他AOP框架(如AspectJ)都实现了这些接口,以实现方法拦截和通知机制。 2. aspectjweaver-1.7.0.jar:这是AspectJ的织入器,负责在运行时动态地将切面(aspect)织入到目标类中。AspectJ提供了一种...

    Spring Aop四个依赖的Jar包

    总的来说,Spring AOP通过这四个关键的Jar包,结合AspectJ的强大功能和CGLIB的代理机制,为开发者提供了强大的面向切面编程支持,使得我们可以在不侵入原有业务代码的情况下,实现跨切面的关注点管理。

    SpringAOP原理及拦截器.pdf

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将关注点分离,使得核心...它通过AOP代理和拦截器机制实现了对目标对象的透明增强,为诸如事务管理、日志记录等功能的实现提供了便捷的方式。

    第四章:Spring AOP API 设计模式1

    8. **装饰器模式(Decorator)**:Spring AOP的动态代理机制实现了装饰器模式,可以在运行时动态添加或移除拦截器,增强对象的功能,而不会改变其原有接口。 9. **享元模式(Flyweight)**:享元模式在Spring AOP中...

    反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) - Java 例子 -

    Spring框架是Java中实现AOP的一个流行工具,它通过动态代理机制实现了这一功能。本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切...

    Spring AOP IOC源码笔记.pdf

    CGLIB是Spring AOP默认的代理库,用于生成目标类的子类,从而实现方法拦截。当目标类没有实现接口时,Spring会使用CGLIB。 8. Spring事务管理: Spring提供了声明式事务管理,通过@Transactional注解在方法级别声明...

    Java spring AOP源码

    这里涉及到了Spring AOP中的动态代理机制。当调用代理对象的方法时,实际上会进入一个回调函数,如下所示: ```java public Object intercept(Object proxy, Method method, Object[] args, MethodProxy ...

    SpringAOP原理及拦截器.doc

    Spring AOP使用拦截器(Interceptor)机制来实现通知,拦截器按照顺序形成一个链,当目标方法被调用时,会逐个执行这些拦截器。这种设计使得我们可以灵活地插入、移除和重新排列通知,而不会影响核心业务代码。 ...

    Spring AOP框架实现的结构分析

    许多 AOP 框架都以拦截器的形式来表现增强--所谓拦截器是这样的一个对象:当连接点被调用时,它会收到一个回调消息。基本的增强有前增强、后增强、环绕增强等。引介是为一个现有的 Java 类或接口添加方法或字段。...

    spring_aop_拦截实例

    本实例主要探讨如何在Spring AOP中实现拦截器。 首先,我们来理解Spring AOP的基本概念。AOP的核心是代理,Spring提供了两种代理方式:JDK动态代理和CGLIB代理。JDK动态代理基于接口,当目标对象实现了接口时使用;...

    spring aop 依赖jar

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下对程序进行功能增强的机制。AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点...

    spring AOP切面编程

    在Spring中,AOP通过代理机制实现了切面编程,允许我们在不修改原有业务代码的情况下,插入额外的功能。 一、理解AOP概念 1. 切面(Aspect):AOP的核心概念,代表一个关注点的模块化,这个关注点可能会横切多个...

    Spring源代码解析(七):Spring_AOP中对拦截器调用的实现.doc

    在Spring AOP中,拦截器调用的实现是通过动态代理机制来完成的,主要涉及到JDK的Proxy类和InvocationHandler接口。本文将详细解析Spring AOP如何利用这两个组件来实现拦截器链的调用。 首先,Spring在生成代理对象...

Global site tag (gtag.js) - Google Analytics