什么是AOP
AOP(Aspect-OrientedProgramming,面向方面编程)。
在我们的代码中,像日志,事务,安全等模块会散步在很多的业务代码中,这些模块称为“横切关注点”。
横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
这些横切关注点与业务代码的核心功能无关,但是却大量存在,导致了大量代码的重复。
AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
AOP相关概念
- 切面(Aspect):通知与切点的结合。用Spring的Advisor实现。
- 连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
- 通知(Advice): 即在调用方法时需要执行的动作,Spring定义了5种通知:前置通知,后置通知,返回通知,异常通知和环绕通知。
- 切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合。
如何使用Spring AOP
Spring提供了4种方式实现AOP:
1. 配置ProxyFactoryBean,显式地设置advisors, advice, target等
2. 配置AutoProxyCreator,这种方式下,还是如以前一样使用定义的bean,但是从容器中获得的其实已经是代理对象
3. 通过来配置
4. 通过来配置,使用AspectJ的注解来标识通知及切入点
AOP现有两个主要的流行框架,即Spring AOP和Spring+AspectJ
下面来看具体的代码实现。
方式一 在XML中声明切面
1. 首先定义一个切面类:
package com.wgs.aspect;
/**
* Created by GenshenWang.nomico on 2017/7/8.
*/
public class TrsactionAspect {
public void beforeMethod(){
System.out.println("before:事务开始了===========");
}
public void afterMethod(){
System.out.println("after:事务结束了======