AOP
来源:互联网 发布:网站80端口开放攻击 编辑:程序博客网 时间:2024/06/06 06:31
AOP (Aspect Oriented Programing 面向切面编程
概念;面向切面编程 扩展功能不修改源代码
采用横向抽取机制
底层动态代理的方式实现
1.接口的方式 (使用了jdk动态代理
直接interface 继承
过程:继承了接口之后,会创建一个和继承类平级的代理对象,具有和继承类相同的功能
2.继承的方式 (使用了cglib动态代理
利用extends 继承父类
创建了子类 继承父类 调用父类的方法 增强父类的方法
连接点(joinPoint:类里面可以被增强的方法
切入点(pointCut:类里面实际被增强的方法
通知/增强(Advice:增强的逻辑。 (前置,后置,最终,循环
切面:把增强应用到方法上面的过程 (面去增强切入点
AspactJ
1.spring里面的aop操作里使用AspactJ实现
.aspackj不是spring的一部分,
.只有spring2.x之后才增加了对aspactj的支持
2.aop的准备
安装aspacjt jar包 spring-aspects,spring-aop,aspectj,aopalliance包
xml写入aop的约束条件
xml中配置Aop操作
(面强化点)
<aop:config>
<aop:piontcut expression="execution(* com.Book.add(..))" id="pointcut1">//配置切入点
<aop:aspect ref="mybook"> //配置切入面 增强类的对象
<aop:before method="before" pointcut-ref="pointcut1"> 哪个类来增强,用到的切入点
</aop:aspect>
<aop:config>
表达式配置切入点表达式
增强切入点
1.excution(* com.Book.add(..)) //*访问修饰符 空格 路径的add方法(即切入点 ..包含参数
2.excution(* com.Book.*(..)) //对类中的所有方法都增强
3.excution(* *.*(..)) //所有类的所有方法都增强
4.excution(* add*(..)) //所有的add开头的方法都增强
前置插入 aop:before method="before" pointcut-ref="point"/>
后置插入<aop:after-returning method="after" pointcut-ref="point"/>
环绕插入<aop:around method="arround" pointcut-ref="point"/>
环绕配置方法
public void arround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕之前");
proceedingJoinPoint.proceed();
System.out.println("环绕之后");
}
概念;面向切面编程 扩展功能不修改源代码
采用横向抽取机制
底层动态代理的方式实现
1.接口的方式 (使用了jdk动态代理
直接interface 继承
过程:继承了接口之后,会创建一个和继承类平级的代理对象,具有和继承类相同的功能
2.继承的方式 (使用了cglib动态代理
利用extends 继承父类
创建了子类 继承父类 调用父类的方法 增强父类的方法
连接点(joinPoint:类里面可以被增强的方法
切入点(pointCut:类里面实际被增强的方法
通知/增强(Advice:增强的逻辑。 (前置,后置,最终,循环
切面:把增强应用到方法上面的过程 (面去增强切入点
AspactJ
1.spring里面的aop操作里使用AspactJ实现
.aspackj不是spring的一部分,
.只有spring2.x之后才增加了对aspactj的支持
2.aop的准备
安装aspacjt jar包 spring-aspects,spring-aop,aspectj,aopalliance包
xml写入aop的约束条件
xml中配置Aop操作
(面强化点)
<aop:config>
<aop:piontcut expression="execution(* com.Book.add(..))" id="pointcut1">//配置切入点
<aop:aspect ref="mybook"> //配置切入面 增强类的对象
<aop:before method="before" pointcut-ref="pointcut1"> 哪个类来增强,用到的切入点
</aop:aspect>
<aop:config>
表达式配置切入点表达式
增强切入点
1.excution(* com.Book.add(..)) //*访问修饰符 空格 路径的add方法(即切入点 ..包含参数
2.excution(* com.Book.*(..)) //对类中的所有方法都增强
3.excution(* *.*(..)) //所有类的所有方法都增强
4.excution(* add*(..)) //所有的add开头的方法都增强
前置插入 aop:before method="before" pointcut-ref="point"/>
后置插入<aop:after-returning method="after" pointcut-ref="point"/>
环绕插入<aop:around method="arround" pointcut-ref="point"/>
环绕配置方法
public void arround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕之前");
proceedingJoinPoint.proceed();
System.out.println("环绕之后");
}