什么是aop
aop(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,aop是OOP的一个延续,是软件开发的一大热点,也是spring框架重要内容。
术语
1、Aspect
切面:表示增强的功能,就是一堆代码,完成某一个功能【非业务方法】
常见的切面功能有日志、事务、统计信息、参数检查、权限验证
2、JoinPoint
连接点,连接业务方法和切面的位置。就时某类中的业务方法
3、Pointcut
切入点,指多个连接点方法的集合,多个方法。
4、Advice
通知,通知表示切面功能执行的时间
5、目标对象
给哪个类的方法增加功能,这个类就是目标对象
切面的关键三要素
1)切面的功能代码,切面干什么
2)切面的执行位置,使用Pointcut表示切面的位置
3)切面执行的时间,使用Advice表示时间,在目标方法之前,还是目标方法之后。
AOP的实现
spring主要在事务处理时使用AOP,我们项目中很少使用spring的AOP实现,因为spring的AOP比较笨重.
是一个开源的,专门做AOP框架。spring框架中集成了aspectJ的框架,通过spring就能使用aspectJ的功能。
aspectJ框架实现aop有两种方式
1、使用xml的配置文件
2、使用注解
我们在项目中要做AOP功能,一般都是使用注解,aspectJ有5个注解
切面的执行时间
这个执行时间在规范中叫Advice(通知,增强)
1)@Before
2)@AfterReturning
3)@Around
表示切面执行的位置
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern ? name-pattern(param-pattern) throw-pattern?)
modifiers-pattern:访问权限类型
ret-type-pattern:返回值类型
declaring-type-pattern:包名类名
name-pattern(param-pattern):方法名(参数类型和参数个数)
throw-pattern:抛出的异常类型
?:可有可无部分
execution(访问权限 方法返回值 方法声明(参数) 异常类型)
例子说明
execution(public * *(..))
指定切入点为:任意公共方法
execution(* set*(..))
指定切入点为:任意一个以set开头的方法
execution(* com.xyz.service.*.*(..))
指定切入点为:com.xyz.servic包下的任意类中的任意方法
execution(* com.xyz.service..*.*(..))
指定切入点为service包或者子包里面的任意类的任意方法
execution(* *..service.*.*(..))
包中含有service包的任意类的任意方法
总结:
* 0至多个任意符号
.. 用在方法参数中,表示任意个参数
用在包名后,表示当前包及其子包路径