Spring成神之路---aop---1

1.什么是aop?

	OOP对比,面向切面,传统的OOP开发中的代码逻辑是至上而下的,在这些至上而下的过程中
会产生一些横切性的问题,这些横切性的问题和我们的主业务逻辑关系不大,会散落在代码的各个
地方,造成难以维护,AOP的编程思想就是把业务逻辑和横切的问题进行分离,从而达到解耦的目
的,提高代码的重用性和开发效率

2.aop的应用场景

	1.日志记录
	2.权限验证
	3.效率检查
	4.事务管理
	5.。。。。

3.aop的常用术语

1.连接点(Join point):需要加强的方法,即我们需要在哪个方法中添加额外的信息,或者说
连接点指的就是目标对象中的一个方法。
2.切点(Pointcut):连接点的集合就是切点。
3.目标对象(Target):就是指我们需要加强的类对象。
4.代理对象(AOP proxy):加强后的目标对象,代理对象是Spring内部根据目标对象重新生
成的一个新的对象,该对象是动态生成的,
5,织入(weaving):是指的将部分逻辑(比如一些日志,权限验证等)加入到连接点的过
程。
6.通知(advice):通知由两部分组成,是由具体的业务逻辑和要放到的具体位置(在连接点
之前、之后、中间执行)组成的。
7.切面(aspect):切面可以理解为是以上内容的载体。

4.spring aop 和AspectJ的联系

	aop是一种思想,和Ioc一样,而spring aop是aop的一种实现方式。AspecJ是一个
面向切面的框架,定义了aop语法。由于spring aop的语法使用比较复杂难以理解,因此
spring借助了AspectJ的语法(主要借助的其中的注解 ),底层的实现还是spring自己的技术
,当我们要在spring中使用AspectJ时需要通过以下两种方式来开启:
	1)在使用xml时,需要在xml配置文件中添加<aop:aspectj-autoproxy/>.
	2)在使用javaConfig时,添加@EnableAspectJAutoProxy.

5.spring aop的切点声明使用

  1. javaconfig

    1)execution的使用方式:aop

    execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

    这里问号表示当前项可以有也可以没有,其中各项的语义如下
    modifiers-pattern:方法的可见性,如public,protected;
    ret-type-pattern:方法的返回值类型,如int,void等;
    declaring-type-pattern:方法所在类的全路径名,如com.spring.Aspect;
    name-pattern:方法名类型,如buisinessService();
    param-pattern:方法的参数类型,如java.lang.String;
    throws-pattern:方法抛出的异常类型,如java.lang.Exception;
    example:
    execution(public * com.spring.service.BusinessObject.businessService(java.lang.String,…))

    2)within的使用:
    within的使用
    within的针对的主要是类,相比于execution,within的粒度更大,它无法针对详细
    的方法,只能针对类。

    3)args的使用:
    args
    args中指明参数类型以及参数个数,spring会匹配所有符合的方法将其织入。

    扫描二维码关注公众号,回复: 4895657 查看本文章

    4)@annotation
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    使用步骤:
    1.需要自己定义注解,如@AnnotationTest.
    2.需要在@annotation中声明自定义的注解
    3.将自定义的注解添加到连接点上,该注解只能置于方法上才生效,置于类上不生效。

    5)@args
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    使用步骤:
    1)需要将自定义的注解加到方法参数所调用的类上面,如上面所示。

6)this和target

this是指代理对象是指定的类或子类则进行织入,target指目标对象为指定的类或子类则进行织入。
在这里插入图片描述
aop的动态代理可以指定为jdk或cglib,可以通过@EnableAspectJAutoProxy(proxyTargetClass = true)指定,当为
true时,为cglib,当为false时,为jdk代理
7)@DeclareParents使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.Spring aop通知类型:
1)前置通知@before
2)后置通知@after
3)环绕通知@around
4)后置异常通知@AfterThrowing
5)后置返回通知@AfterReturning
在使用通知时可以为其添加参数,如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hdjansdasd/article/details/86092442