2019-01-07

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.*.*(..)**

你可能感兴趣的:(2019-01-07)