AOP
理解AOP编程思想(面向方法、面向切面)
spring AOP的概念
- 方面 -- 功能
- 目标 -- 原有方法
- 通知 -- 对原有方法增强的方法
- 连接点 -- 可以用来连接通知的地方(方法)
- 切入点 -- 将用来插入通知的地方(方法)
- 织入 -- 将通知插入切入点的过程
- 切面 -- 通知 切入点 织入的总称
使用spring框架实现AOP编程
1.配置文件中,在文件头,加上AOP的命名空间
2.配置AOP标签
spring aop通知(advice)分成五类:
前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。
AOP原理:
spring如何实现AOP
静态代理,弊端,每一个目标,都需要单独写一个代理类,每一个代理类只能代理一个固定的目标,代码量大。
动态代理,写一个代理类,代理类会产生代理对象,然后这个代理对象,可以代理任何一个对象和目标。
JDK动态代理: 只能用于面向接口变成的对象,目标类一定是实现了某个接口的。通过生成代理类,实现和目标类一样的接口,重写接口方法,来完成代理。
cglib动态代理: cglib api,它适合代理没有面向接口编程的目标类,通过继承目标类,产生子类,重写父类方法的方式,实现代理。
spring AOP根据上面的两行代码,识别该目标类,是否是面向接口编程的,从而选择不同的动态代理方式,创建代理类。