01-aop简介-什么是aop
aop是什么?
aop----Aspect Oriented Programing :面向切面编程;
如果要完成一个功能,找切面即可;
oop----Object Oriented Programing :面向对象编程:
如果要完成一个功能,找对象即可;
AOP有什么作用?
在不修改源码的情况下,对方法增强,最终达到的效果就是业务之间完成解耦;
02-aop简介-aop的作用及其优势
03-aop简介-aop的底层实现
实现aop的技术是什么?
动态代理:
JDK代理:
基于接口的动态代理;
cglib代理:
基于父类的动态代理;
*******************************
如果把一个对象的创建权交给spring,让spring生成一个动态代理对象(默认情况):
如果目标对象实现了接口:就使用JDK动态代理;
如果目标对象没有实现接口:则使用cglib动态代理;
04-aop简介-基于jdk的动态代理
使用jdk动态代理涉及到的3个角色?
目标对象;
代理对象;
接口;
05-aop简介-基于cglib的动态代理(了解)
使用cglib动态代理的2个角色?
目标对象;
代理对象;
********************************
cglib生成的动态代理对象,它的父类就是目标对象对应的类
****************************************************************
AOP有什么作用:
在不修改源码的情况下,对方法增强,最终达到的效果就是业务之间完成解耦,解耦目标提高灵活性、复用性、可维护性;
aop----Aspect Oriented Programing :面向切面编程;
如果要完成一个功能,找切面即可;
如何找切面?
只需要在配置文件中,通过配置切入点和通知,就能找到切面
AOP相关概念:
joinpoint连接点:
可以被增强的方法;
pointcut切入点:
真正被增强的方法;
advice通知:
增强的内容;
aspect切面:
切入点+通知;
Weaving织入:
在程序的运行过程中,真正的把切入点和通知结合到一块,称之为织入;
06-aop简介-aop相关概念
Target(目标对象):代理的目标对象
Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类
Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义
Advice(通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知
Aspect(切面):是切入点和通知(引介)的结合
Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入
07-aop简介-aop开发明确的事项和知识要点
把通知和切入点结合到一块的底层技术是什么?
动态代理
08-xml方式实现aop-快速入门
1.导入坐标:
spring-context;
aspectjweaver;
2.编写java代码;
3.编写applicationContext.xml核心配置文件;
4.测试(spring集成junit测试)
aop:config
<aop:aspect ref=“myAspect”>
<aop:before method=“before” pointcut=“execution(public void live.longmarch.aop.Target.save())”></aop:before>
</aop:aspect>
</aop:config>
09-xml方式实现aop-切点表达式的写法
execution(public void com.itheima.aop.Target.save())
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
访问修饰符可不可以省略?
可以
* 指的是什么?
任意的 返回值/包名/类名/方法名
… 指的是什么?
任意的 参数/包及子包;
最常用的写法:
execution(* cn.itcast.service.impl.*.*(..));
10-xml方式实现aop-通知的种类
以下每一种通知在什么时候执行?
前置通知:
目标方法执行之前执行
后置通知:
目标方法执行之后执行
环绕通知:
程序员决定
异常通知:
目标方法执行发生异常后执行
最终通知:
不管目标方法有没有发生异常,都会执行
环绕通知的方法有什么要求?
增强内容的方法上必须声明一个参数,ProceedingJoinPoint
public Object around(ProceedingJoinPoint pjp) throws Throwable {
//代表的是正在执行的切入点方法;
//相当于把切入点方法的执行权交给了程序员
}
11-xml方式实现aop-切点表达式的抽取
为什么要抽取切点表达式?
优化代码 共性抽取,便于代码的维护
12-xml方式实现aop-知识要点
13-注解方式实现aop-快速入门
使用注解完成aop开发的步骤?
1.通过@Aspect标识切面类;
2.通过@Component把切面类交给spring管理;
3.通过@Before(切入点表达式)/@AfterReturning(切入点表达式)…配置通知和切入点;
4.在核心配置文件中,开启包扫描;
<context:component-scan base-package=“com.itheima.anno”/>
5.在核心配置文件中,开启aop自动代理;
aop:aspectj-autoproxy/
14-注解方式实现aop-注解通知种类和切点表达式抽取
引用抽取后的表达式的两种方式?
@Pointcut(“execution(void live.longmarch.anno..(…))”)
public void pointcut(){}
15-注解方式实现aop-知识要点