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,就是給程序加一個功能 ,在哪裏,什麼時間,需要做什麼,只是通過一種隱式的辦法,來告訴程序