再看AOP,Where,When ,What

AOP

剛開始學習Java的時候,對aop的概念,看不很明白,今天再來看AOP,現在能想其實和動態代理來看也差不多,都是隱式的給你加些功能

圖解

切面 aspect 直白點就是要在切點插入的東西,就是what
切點 pointcut 就在要什麼地方 ,就是 where
在這裏插入圖片描述
代碼

精通類

public class SampleAdder {

    public SampleAdder() {
    }

    public int add(int a, int b) {
     System.out.println("執行了加法");
        return a + b;
    }


}

切面類,相當於一個加強功能

public class AdderAfterReturnAspect {

    public AdderAfterReturnAspect() {

    }

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    public void afterReturn(Object returnValue) throws Throwable {
        logger.info("value return was {}", returnValue);
    }

}

配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean id="sampleAdder" class="com.dubbo.aop.SampleAdder"/>
    <bean id="doAfterReturningAspect"
          class="com.dubbo.aop.AdderAfterReturnAspect"/>
    <aop:config>
        <aop:aspect id="aspects" ref="doAfterReturningAspect">
            <aop:pointcut id="pointCutAfterReturning" expression=
                    "execution(* com.dubbo.aop.SampleAdder+.*(..))"/>
            <aop:after-returning method="afterReturn"
                                 returning="returnValue" pointcut-ref="pointCutAfterReturning"/>
        </aop:aspect>
    </aop:config>

</beans>

解讀配置文件

定義兩個bean
aop:aspect 定義一個切面 what
aop:pointcut 定義一個切點 where
aop:after-returning 定義什麼時候 when

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean id="sampleAdder" class="com.dubbo.aop.SampleAdder"/>
    <bean id="doAfterReturningAspect"
          class="com.dubbo.aop.AdderAfterReturnAspect"/>
    <aop:config>
        <aop:aspect id="aspects" ref="doAfterReturningAspect">
            <aop:pointcut id="pointCutAfterReturning" expression=
                    "execution(* com.dubbo.aop.SampleAdder+.*(..))"/>
            <aop:after-returning method="afterReturn"
                                 returning="returnValue" pointcut-ref="pointCutAfterReturning"/>
        </aop:aspect>
    </aop:config>

</beans>

總結

總結起來AOP,就是給程序加一個功能 ,在哪裏,什麼時間,需要做什麼,只是通過一種隱式的辦法,來告訴程序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章