spring-aop:
动态代理在程序执行过程中创建动态代理对象,通过动态代理对象 通过执行方法 给目标类的方法增加额外功能称为功能增强
实现步骤JDK
1.创建目标类,SomeServiceImpl目标类,给它的doSome,doOther增加输出时间,事务
2.创建InvocationHandler接口实现类,在这个类实现给目标方法增加功能
3.使用jdk类proxy,创建动态代理对象。实现创建对象的能力
spring-aop:
动态代理:
1.JDK动态代理,使用jdk中proxy,Meghod,InvocationHanderl创建动态代理对象。实现创建对象的能力
JDK动态代理必须实现接口
2.cglib动态代理:第三方的工具库,创建代理对象,原理是继承,通过继承目标,创建子类 子类就算动态代理对象,目标类不能是final,方法也不是是final
作用: 1.在源代码不改变的情况下,增加功能
2.减少代码重复率
3.专注业务逻辑代码
4.解耦合 让业务功能跟非业务功能分离
AOP:面向切面编程,基于动态代理的 ,可以使用jdk/cglib两中代理方式。
AOP就是动态代理的规范化,把动态代理的实现步骤,方式都定义好,让开发人员用一种统一的方式使用动态代理
AOP:面向切面编程
Aspect:切面,给目标类的方法增加额外功能称为切面 切面特点一般都是非业务方法可以独立使用
Orlent:面向
Programmling:编程
面向切面编程:
1.需要在分析项目功能时,找出切面
2.合理的安排切面的执行时间
3.合理的安排切面的执行位置
面向切面编程的基本术语:
1.Aspect:切面 表示增强功能,就是一堆代码,完成某个功能,非业务功能
2.JoinPoint:连接点 ,连接业务跟切面的位置,就是某类中的业务方法
3.Pointcut:切入点,指多个连接点方法的集合,多个方法
4.目标对象:要给哪个类增加方法功能,这个类就是目标对象
5.Advice:通知,通知表示切面功能执行的时间
切面三个关键要素:
1.切面的功能代码 切面干什么
2.切面的执行位置,使用Pointcut表示切面的执行位置
3.切面的执行时间,使用Advice表示时间,在目标方法之前,还是方法之后
AOP实现:
1.aop是一个规范,是动态的一个规范化,一个标准
aop技术实现框架:spring在内部实现了aop的规范化,能做AOP的工作 主要在事务处理使用AOP 项目开发中很少使用spring中的AOP 比较笨重
2.aspectJ:是一个开源专门做aop的框架。spring框架集成了aspertj框架,通过spring就能使用aspectj的功能
aspectJ框架实现aop有两中方式
1.使用xml配置文件配置全局事务
2.使用注解,我们在项目中要做aop功能,一般都使用注解,aspectj有五个注解
学习aspectjd的使用语法:
1.切面的执行时间,在规范中叫做Advice
在aspectj框架中使用注解表示:
1.@Before
2.@AfterReturning
3.@Around
4.@AfterThrowing
5.@After
使用aspectj框架实现aop 目的:给以及存在的类一些类跟方法,增加额外的功能。前提是不改变原来的代码。
使用aspectj实现aop的基本步骤
1.新建maven
2.加入依赖
1.spring依赖
2.aspectj依赖
3.junit单元测试
3.创建目标类:接口和她的实现类
给类的方法增加功能
4.创建切面类:普通类
1.在类的上面加@Aspect
2.在类的定义方法,方法就是面向切面要执行的功能代码
在方法的上面加入aspectj中的注解通知,例如@Before 有需要指定切入点表达式execution()
5.创建spring的配置文件 在文件中要声明对象,把对象交给容器统一管理
声明对象可以使用注解 或者 xml配置文件
1.声明目标对象
2.声明切面类的对象
3.声明aspectj框架中的自动代理生成标签 自动代理生成器:用来完成代理对象的自动创建功能的。
6.创建测试类,从spring容器中获取目标对象(实际就是代理对象)
通过代理执行方法,实现aop的功能增强
aspectj通过注解实现动态代理功能