Spring AOP的几种实现方式总结

  

<强> AOP核心概念

  

1,横切关注点

  

对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

  

2,切面(方面)

  

类是对物体特征的抽象,切面就是对横切关注点的抽象

  

3,连接点(连接点)

  

被拦截到的点,因为春天只支持方法类型的连接点,所以在春天中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

  

4,切入点(切入点)

  

对连接点进行拦截的定义

  

5,通知(建议)

  

所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置,后置,异常,最终,环绕通知五类

  

6目标对象

  

代理的目标对象

  

7,织入(织)

  

将切面应用到目标对象并导致代理对象创建的过程

  

8日引入(介绍)

  

在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

  

<强>春实现AOP所需要的包:

  

1,春天提供的jar包
  

  

2, aopalliance.jar   

3, aspectjweaver.jar   

<强>春实现AOP的方式:

  

1, Java动态代理

  

该方法针对接口的实例创建代理

  

中的配置如下:

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt;豆类xmlns=" http://www.springframework.org/schema/beans "   xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance "   xmlns: aop=" http://www.springframework.org/schema/aop "   xmlns: tx=" http://www.springframework.org/schema/tx "   xsi: schemaLocation=" http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-4.2.xsd   http://www.springframework.org/schema/aop   http://www.springframework.org/schema/aop/spring-aop-4.2.xsd”比;      & lt; bean id=癱oncreteImplementor”类=" com.marving.aop。ConcreteImplementor”/比;      & lt; bean id=癷nterceptorHandler”类=" com.marving.aop。InterceptorHandler”/比;      & lt; aop: config>   & lt; aop: id=袄菇亍狈矫鎟ef=癷nterceptorHandler”比;   & lt; aop:切入点id==癮ddAllMethod”表达“执行(* com.marving.aop.Abstration。* (. .)”/比;   & lt; aop:之前方法=" doSomething " pointcut-ref=" addAllMethod "/比;   & lt; aop:在方法=" doSomething " pointcut-ref=" addAllMethod "/比;   & lt;/aop: aspect>   & lt;/aop: config>   & lt;/beans>之前      

其中Abstration为接口,ConcreteImplementor为实现类,InterceptorHandler为代理拦截类。

        公共接口& lt;跨度祝辞Abstration{   公共空间操作()   }         //具体实现化角色   公共类ConcreteImplementor实现实现者{      @Override   公共空间操作(){   System.out.println (“ConcreteImplementor”);   }      }            公开课InterceptorHandler {   公共空间printTime () {   system . out。println (" CurrentTime=" + System.currentTimeMillis ());   }   }      

2, CGLIB生成代理
  

  

CGLIB针对代理对象为类的情况使用。
  

  

通过实现MethodInterceptor接口,并实现公共对象拦截(对象obj,方法,对象[]参数,MethodProxy代理)抛出Throwable方法生成代理。

  

3, BeanNameAutoProxyCreator实现AOP

  

春为我们提供了自动代理机制,让容器为我们自动生成代理,把我们从烦琐的配置工作中解放出来,在内部,弹簧使用BeanPostProcessor自动地完成这项工作。
  

  

具体配置如下:,

        & lt; bean id=癕yInterceptor”类=" com.yesjpt.interceptor。MyInterceptor”祝辞& lt;/bean>   & lt;豆   类=皁rg.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”比;   & lt;属性名=癰eanNames”比;   & lt; list>   & lt; value> * Service   & lt;/list>   & lt;/property>   & lt;属性名=癷nterceptorNames”比;   & lt; list>   & lt; value> MyInterceptor   & lt;/list>   & lt;/property>   & lt;/bean>      之前      

其中*服务为需要拦截代理的bean,以服务结尾的都被拦截,并使用MyInterceptor进行拦截,可配置多个拦截器,按顺序执行。

        进口java.lang.reflect.Method;   进口org.aopalliance.intercept.MethodInterceptor;   进口org.aopalliance.intercept.MethodInvocation;/* *   * @author   *   */公共类MyInterceptor实现MethodInterceptor {      @Override   公共对象调用(MethodInvocation调用)抛出Throwable {      方法方法=invocation.getMethod();//获取被拦截的方法   对象=[]参数invocation.getArguments();//获取拦截方法的参数/*   *特殊,某些权限需要做特殊处理   *比如用户信息权限,在方法执行完毕返回的时候,要将电话号码与邮箱抹除   *///环绕通知前置特殊处理   this.beforeReslove ();   对象进行=invocation.proceed();//调用目标方法//环绕通知后置特殊处理   继续=this.afterReslove ();   返回进行;   }   私有对象afterReslove () {   system . out。println (" CurrentTime=" + System.currentTimeMillis ());   返回null;   }   私人空间beforeReslove () {   system . out。println (" CurrentTime=" + System.currentTimeMillis ());   }   }   

Spring AOP的几种实现方式总结