1、底层是动态代理:
1)jdk动态代理,使用jdk中的Proxy
,Method
,InvocationHandler
创建代理对象
jdk动态代理要求目标类必须实现接口
2)cglib动态代理:第三方的工具库,创建代理对象,原理是继承。通过继承目标类,创建子类。子类就是代理对象。要求目标类不能是final
的,方法 也不能是final
的
2、Aop就是动态代理的规范化,把动态代理的实现步骤,方法都定义好了
让开发人员用一种统一的方式,使用动态代理。
3、AOP的作用:
1)在目标类源代码不改变的情况下,增加功能
2)减少代码的重复
3)专注业务逻辑代码
4)解耦合,让你的业务功能和日志,事务非业务功能分离
4、什么时候考虑使用AOP技术
1、当你要给一个系统中存在的类修改功能,但是原有的类不够完善,但是你还有源代码,就使用aop增加功能
2、你要给项目的多个类增加一个相同的功能
3、给业务方法增加事务,日志输出
5、aop的实现框架
1、spring实现了aop,实现方式是接口
2、aspect框架:
- 使用注解可以实现aop功能
- 使用xml配置文件中的标签实现aop功能
6、aop中概念
1、aspect
:切面,表示给业务方法增加功能,一般日志输出,事务,权限检查等是切面
2、pointcut
:切入点,是一个或多个JoinPoint的集合,表示切面功能执行的位置
3、advice
:通知,也叫增强,表示切面的执行时间,在方法前和方法后等等
7、aspect框架的使用
1、表示切面的执行时间,使用的通知注解——1.@Before:前置通知,在目标方法前先执行切面的功能
2、表示切面位置的切入点表达式:execution(访问修饰符 返回类型 包名.类名.方法名称(方法的参数) 异常)