<强> 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的几种实现方式总结