美文网首页
spring-aop认识

spring-aop认识

作者: 想做安徒生 | 来源:发表于2018-06-22 20:43 被阅读0次

基础前瞻
两种动态代理对比:

1.JDK 动态代理:基于接口,只能为接口创建实现动态代理,通过调用目标类实现。

2.CGLib动态代理:基于字节码,创建子类的形式,拦截所有父类的调用。

对比来看:频繁创建类的场景,CGLib效率要比JDK低,而从执行效率的角度,CGlib要比JDK高。

Spring使用原生的动态代理机制虽然可以实现AOP,但是依然有不足的地方:

(1)范围太大,不灵活--目标类所有方法都被动态代理:

(2)织入点扩展不方便—依赖硬编码的形式编写植入点代码

(3)手动创建代理类,代码重复率高,不通用。

Spring的改进:

(1)Pointcut指定织入横切范围

(2)Advice(增强),描述横切逻辑和织入点(方法前 方法后 方法两端)

(3)Avisor(切面)组织 切点 和 增强

Spring扩展增强接口

(1)MethodBeforeAdvice:前置增强 @Before

(2)AfterReturningAdvice:后置增强 @AfterReturning

(3)MethodInterceptor:环绕增强 @Around

(4)ThrowsAdvice:异常增强,适用于事务管理—标签接口 @AfterThrowing

(5)引介增强:类级别的 @DeclareParent

(6)@After 一般用于释放资源

在Spring 的AOP中,如果一个Proxy同时实现MethodBeforeAdvice、AfterReturningAdvice和MethodInterceptor接口,那么这三个Advice的执行顺序是什么样的呢?
经过试验,是和xml文件中的定义顺序有关的。
如果Proxy的接口实现定义为 MethodBeforeAdvice、AfterReturningAdvice、MethodInterceptor
那么执行的结果是
MethodBeforeAdvice
MethodInterceptor: before call
Really method excuting
MethodInterceptor: after call
AfterReturningAdvice

Spring 切面:

(1)静态切面

image.png image.png

(2)动态切面

image.png

Spring自动创建代理

(1)基于Bean配置名规则创建器:BeanNameAutoProxyCreator

image.png

(2)基于Advisor匹配机制的创建器:DefaultAdvisorAutoProxyCreator

image.png

(3)基于Bean的AspectJ注解标签的创建器:AnnotionAwareAspectJAutoProxyCreator

AspectJ是采用注解的形式描述切点、增强

spring配置

image.png

Schema 配置

image.png

AOP无法增强的案例问题:

(1)内部方法之间的调用无法被增强:

访问连接点信息

image.png image.png

相关文章

  • spring-aop认识

    基础前瞻两种动态代理对比: 1.JDK 动态代理:基于接口,只能为接口创建实现动态代理,通过调用目标类实现。 2....

  • 自定义注解,aop+redis,实现controller接口频率

    1,环境配置 引入aop的jar包compile 'org.springframework:spring-aop:...

  • spring-4.3.4.RELEASE集成AOP 实战

    一、依赖引入 (包括 spring-aop 以及 aspectj) 二、切面配置代码 (使用 javaConfig...

  • spring-AOP

    Aspects,切面 spring-aop 是spring-aspects的上层建筑 targetClass Me...

  • spring-aop

    aop概念aop概念aop术语AOP实现方式1、spring-aop(使用xml文件实现AOP)2、AspectJ...

  • spring-aop

    Aop-面向切面编程,在程序中主要用来解决一些系统层面上的问题,比如:日志,事务,权限等。 aop的一些基本概念:...

  • spring-aop

    1, aop的两种实现机制动态代理:利用jdk/cglib动态代理,性能弱一丢丢 jdk动态代理:所有的方法调用被...

  • spring-aop

  • Spring-AOP

    AOP的概念 面向切面的编程,切面用于描述分散在对象、类或者函数中的横向关注点,通过分离这些关注点,把解决特定领域...

  • spring-aop

    aop概念 aop术语 joinpoint连接点:类中可以被增强的方法(其实就是类中的方法) pointcut切入...

网友评论

      本文标题:spring-aop认识

      本文链接:https://www.haomeiwen.com/subject/hnjlyftx.html