title: Spring aop理解帮助文档
程序员小白一只,现在还在学习中,关于AOP的一些东西有自己的理解,暂时记录一下=0=
### 1.AOP面向切面编程的术语解释
AOP实际上也就是Spring框架为我们实现了动态代理;在不更改源代码的情况下对方法进行增强;所以也就分成了被增强类与增强类两个类,我们可以把这两个抽象的概念想象成两条单链的DNA,来具体化,方便理解;
* 以下是针对术语的解释;
Joinpoint:(连接点)被代理的对象所有的方法都是连接点,
(假如,我们把两个对象想象成两条单链DNA,被增强类上的所有方法(被配对的单链DNA上面的所有连接口就是连接点))
Pointcut:(切入点)被代理对象所有被增强的方法就是切入点
(假如,我们把两个对象想象成两条单链DNA,两个DNA配对的过程中,完成配对的连接点就是切入点)
Advice:(通知/增强)就是增强的方法(假如,我们把两个对象想象成两条单链DNA,把方法想象成DNA上的节点,那么去增强其他单链DNA的单链DNA上的节点就是增强)
Target:目标对象,(假如,我们把两个想象成两条单链DNA,被配对的那个单链DNA就是目标对象)
Weaving:(织入)把增强应用到目标对象的过程;(假如,我们把两个想象成两条单链DNA,两个DNA配对的过程就是织入)
Proxy:代理对象,一个对象被代理成功之后返回的对象(假如,我们把两个想象成两条单链DNA,配对成功之后的双链DNA就是Proxy)
Aspect:就是切入点和通知的结合面(假如,我们把两个想象成两条单链DNA,两个DNA配对完成之后的DNA链中间的面,就是切面)
* 针对配置文件中配置aop的理解
1.把通知bean也交给spring来管理(生成一条用于增强的DNA链)
2.aop:config便是开始配置aop的配置(开始配对)
3.aop:aspect 表明配置切面(生成切面)
id:给切面提供一个唯一的标识(表示切面的编号)
ref:指定通知类bean的id(增强的DNA链的编号)
order:连接的执行顺序;默认值是Interage的最大值,一般不指定
4.在.aop:aspect的标签内部使用对应标签来配置通知的类型
我们现在让通知类在被增强的方法前执行,所以是前置通知
aop:before表示的是配置前置通知(旋转增强的DNA链的增强方法,配置执行顺序)
method属性 就是制定通知类中哪个方法是前置通知(指定用增强DNA中哪个方法(节点)去增强)
pointcut属性:用于指定切入点表达式,该表带是的含义就是指的是对被代理层的哪些方法增强(指定去增强目标DNA链的哪个方法(节点))
切入点表达式的写法:
关键字:execution(表达式)
* 表达式的写法:
表达式:
访问修饰符 返回值 包名.包名....类名.方法名(参数列表)
访问修饰符可以省略
void com.itheima.service.impl.AccountServiceImpl.saveAccount()
返回值可以使用通配符,表示任意返回值
* com.itheima.service.impl.AccountServiceImpl.saveAccount()
包名可以使用通配符,表示任意包。但是有几级包,就需要写几个*.
* *.*.*.*.AccountServiceImpl.saveAccount())
包名可以使用..表示当前包及其子包
* *..AccountServiceImpl.saveAccount()
类名和方法名都可以使用*来实现通配
* *..*.*()
参数列表:
可以直接写数据类型:
基本类型直接写名称 int
引用类型写包名.类名的方式 java.lang.String
可以使用通配符表示任意类型,但是必须有参数
可以使用..表示有无参数均可,有参数可以是任意类型
全通配写法:
* *..*.*(..)
实际开发中切入点表达式的通常写法:
切到业务层实现类下的所有方法
*** com.itheima.service.impl.*.*(..)**