什么是代理
指为一个目标对象提供一个代理对象, 并由代理对象控制对目标对象的引用.
使用代理对象, 是为了在不修改目标对象的基础上, 增强目标对象的业务逻辑
为什么要使用代理:
1.可以隐藏目标类的具体实现
· 2 。在不修改目标类代码的情况下能够对其功能进行增强
代理分为静态代理和动态代理
静态代理
若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,
这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静
态代理中的代理类和目标类会实现同一接口或是派生自相同的父类。
动态代理
代理类在程序运行时创建的代理方式被成为 动态代理。 也就是说,这种情
况下,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代
码中的“指示”动态生成的。
常用的动态代理有两类:JDK动态代理和CGLIB动态代理
如果目标对象实现了接口,采用JDK的动态代理
如果目标对象没有实现了接口,必须采用CGLIB动态代理
AOP:面向切面编程,就是将交叉业务逻辑封装成切面,利用AOP的功能将
切面织入到主业务逻辑中。所谓的交叉业务逻辑是指,
通用的,与业务逻辑无关的代码,如检查、事务、日志等
AOP:面向切面编程: 的优点
1、降低模块之间的耦合度。
2、使系统容易扩展。
3、更好的代码复用。
4、使代码有更好的可读性和易于维护
Aop基本术语:
1.切面:切面泛指交叉业务逻辑,
2 织入:织入是指将切面代码插入到目标对象的过程
3 连接点:连接点指切面可以织入的位置
4 切入点:切入点指切面具体织入的位置
AspetJ的切入点表达式
execution( * *..service.*.*(..) )
指定所有包下的service子包下所有类(接口)中的所有方法为切入点
execution切入点表达式
第一个 * 代表的是方法的返回值类型
后面的 *.. 代表的是多级包
service指的是service这个子包
.* 包下边可以有类和接口
后面的 * 代表的是方法名
(..) 代表方法的参数是任意的
AspectJ对AOP的实现
对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可
以完成面向切面编程。然而,AspectJ也实现了AOP的功能,且其实现方式更为简捷,
使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实
现也引入到了自己的框架中。
在Spring中使用AOP开发时,一般使用AspectJ的实现方式
常用的通知有五种类型:
前置通知
后置通知
环绕通知
异常通知
最终通知:无论程序执行是否正常,该通知都会执行。类似于
try..catch中finally代码块。
使用注解来实现这5中通知
切面类的配置
xml中
使用方法
xml配置文件中·