美文网首页
spring-aop

spring-aop

作者: 码农崛起 | 来源:发表于2018-05-08 01:34 被阅读0次

1, aop的两种实现机制
动态代理:利用jdk/cglib动态代理,性能弱一丢丢

jdk.png

jdk动态代理:所有的方法调用被jvm拦截,然后路由到代理类的invoke方法,invoke方法再委托给target。

cglib.png

cglib动态代理:动态生成target的子类的字节码,然后把方法调用委托给target里的相同方法。

静态织入:编译时修改字节码,每次修改aop相关都要重新编译

2,Pointcut

Pointcut.png

Pointcut表示切点,表示要拦截哪些类的哪些方法。

AnnotationMatchingPointcut:匹配类或/和方法上有指定注解
AspectJExpressionPointcut:基于AspectJ切点表达式匹配
ComposablePointcut:组合切点
ControlFlowPointcut:控制流切点,比其他切点慢10-15倍
DynamicMethodMatcherPointcut:
StaticMethodMatcherPointcut:
JdkRegexpMethodPointcut:
NameMatchMethodPointcut:

3, Advice

Advice.png

Advice表示通知,表示要执行的行为

MethodInterceptor:环绕通知,在被拦截的方法执行之前和之后执行
ConstructorInterceptor:拦截实例化
MethodBeforeAdvice:被拦截方法执行之前执行,不能阻止被拦截方法的执行,除非抛出异常。
IntroductionInterceptor:动态实现接口
AfterReturningAdvice:被拦截方法执行之后执行,被拦截方法抛出异常不执行,能看到被拦截方法返回值,但是不能修改
ThrowsAdvice:标记接口,被拦截方法抛出异常时执行,通过反射执行void afterThrowing([Method, args, target], ThrowableSubclass)方法

4, Advisor

Advisor.png

Advisor表示切面,是切点和通知的组合

PointcutAdvisor:基于切点的切面,切点和通知的组合
IntroductionAdvisor:满足条件的类利用IntroductionInterceptor实现指定接口

5, ProxyFactory

ProxyFactory.png

根据切面和target生成动态代理。

动态代理.png

设置优化,代理目标类,没有提供代理接口时使用cglib代理。

jdk-proxy-1.png jdk-proxy-2.png

jdk动态代理:invoke方法中把方法调用都通过反射调用target的对应方法

生成字节码.png 实例化.png

cglib动态生成字节码然后实例化

6, ProxyFactoryBean
继承ProxyCreatorSupport,设置各种代理相关参数。实现FactoryBean<Object>, BeanClassLoaderAware, BeanFactoryAware接口

getObject.png getSingletonInstance.png newPrototypeInstance.png

7, InstantiationAwareBeanPostProcessor

InstantiationAwareBeanPostProcessor.png

利用InstantiationAwareBeanPostProcessor拦截bean实例的构造,如果bean被注解或xml等配置的advisor拦截到,不再使用构造方法,返回动态生成的代理。

屏幕快照 2018-05-08 下午6.42.14.png 屏幕快照 2018-05-08 下午6.42.35.png

相关文章

  • 自定义注解,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

    aop 概念:面向切面编程作用:不用修改原来的类就可以添加新功能 专业术语 joinpoint 连接点:类中可以被...

网友评论

      本文标题:spring-aop

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