zoukankan      html  css  js  c++  java
  • Spring学习(八)--Spring的AOP

    自工作以后身不由己,加班无数,996、995不可控制,高高立起的flag无法完成,无奈,随波逐流,尽力而已!

    1、advice通知

    advice主要描述Spring AOP 围绕奥方法调用而注入的切面行为,具体的接口定义在org.aopalliance,aop.Advice中,通过接口提供了更具体的通知类型:BeforAdvice、AfterAdvice、ThrowAdvice等。

    2、Pointcut切点

    Pointcut决定Advice通知作用在哪个连接点,通过Pointcut来定义需要增强的方法的集合。

    在Pointcut的接口基本定义中,需要返回一个MethodMatcher,有MethodMatcher来判断对当前方法的调用是否需要增强,是否对当前调用的方法执行配置好的Advice通知。

    3、Advisor通知器

    通过Advisor通知器把切面增强设计和关注点的设计结合起来。

    在DefaultPointcutAdvsior中,通过属性advice和pointcut两个属性完成对Advice通知和Pointcut切点的配置和组合。

    在DefaultPointcutAdvsior中Pointcut默认为Pointcut.True,Pointcut.True在Pointcut接口中被定义为Pointcut True = TruePointcut,INSTANCE,

    TruePointcut,INSTANCE是一个单件,使用Static属性持有单件实例,使用private私有构造函数来确保除了当前单件实现中,单间不会再次创建和实例化,保证单件特性。

    4、AOP的实现--JVM动态代理特性

    Spring AOP核心是动态代理,动态代理是JDK的一个特性,通过JDK特性,可以为任意Java对象创建代理对象,这个特性是通过Java Reflection API来完成的。

    JDK的proxy实现:在Java的reflection包中看到Proxy对象,这个对象生成后,作用和Proxy模式中proxy对象作用一样。使用时为proxy对象设计一个回调方法,回调方法中加入作为代理额外处理的动作,回调方法需要实现InvocationHandler这个接口,接口中声明一个invoke方法,invoke方法的第一个参数还代理对象实例,第二个是参数方法Meahod的对象,表示当前proxy被调用的方法,最后一个参数是被调用的方法中的参数。

    proxy和invoke连接:通过调用Proxy.newIntance方法生成具体Proxy对象的过程中把InvocationHandler设置到参数里。

    proxy静态类图:

    RealSubject为目标对象,代理模式中设计一个接口和目标一致的代理对象Proxy,他们都实现了接口Subject的request方法,这种情况下,对目标对象RealSubject的调用就会被Proxy拦截下来,为对目标对象的操作进行铺垫。

    Proxy模式调用关系:

    如果客户Client调用Proxy的request方法,会在调用目标对象的request方法前后进行一系列的处理,这些处理目标对象是不知道的。

     5、建立AopProxy代理对象

    通过配置和调用Spring的ProxyFectoryBean建立AOP的Proxy代理对象。

    AOP的Proxy代理对象建立类的继承关系:

    ProxyFactory和ProxyFactoryBean提供了AOP功能的封装,其中ProxyFactory需要编程式的使用AOP功能,ProxyFactoryBean可以在IOC容器中完成声明式的配置。

    AspectJProxyFactory用来集成Spring和AspectJ。

    AdvisedSupport不同于ProxyConfig在于AdvisedSupport中封装了对Advice通知和Advisor通知器相关操作。

  • 相关阅读:
    类间关系总结
    Android数据持久化技术
    广播
    活动
    Clean Code
    理解async特性
    async和await构成的异步方法
    ubuntu开启ssh服务
    lumen可以使用laravel-ide-helper
    laravel excel迁移到lumen
  • 原文地址:https://www.cnblogs.com/carblack/p/10905740.html
Copyright © 2011-2022 走看看