spring -7 aop編碼補充註解實現
阿新 • • 發佈:2021-02-11
目錄
XML形式的編碼回顧
package aop; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class MyAspect implements MethodInterceptor { @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { Object ret = null; System.out.println("執行在原始方法之前"); ret = methodInvocation.proceed(); System.out.println("執行在原始方法之後"); return ret; } }
XML中配置
<!-- 原始物件--> <bean id="userDao" class="core.UserDaoImpl"></bean> <!-- 額外功能--> <bean id="around" class="aop.MyAspect"></bean> <!--Proxy -target-class 預設false,執行JDK,true,執行cglib--> <aop:config proxy-target-class="true"> <!-- 定義切入點--> <aop:pointcut id="pc" expression="within(core..*)"/> <!-- 組裝--> <aop:advisor advice-ref="around" pointcut-ref="pc"></aop:advisor> </aop:config>
註解方式的使用
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; /** * aop額外功能 類註解 * 表示切面類 */ @Aspect public class MyAspect1 { /** * 這個方法必須是空實現,返回值是void */ @Pointcut("within(core..*)") public void pointcut(){}; /** * 這是自定義aop實現類額外功能方法,必須加上@Around註解 * @param joinPoint 這個引數的作用同MethodInterceptor【spring】中MethodInvocation methodInvocation * @return 原始方法執行結果的返回值 */ // 該註解表示額外功能類,裡面的value值是切入點表示式 // @Around("within(core..*)") // 為了其他的額外功能重用切入點,避免重複的書寫切入點 @Around("pointcut()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { Object ret = null; System.out.println("原始方法執行之前"); ret = joinPoint.proceed(); System.out.println("原始方法執行之後"); return ret; } }
配置檔案中:
<!-- 原始物件-->
<bean id="userDao" class="core.UserDaoImpl"></bean>
<!--額外功能 包括了切入點。-->
<bean id="around" class="aop.MyAspect1"></bean>
<!--自動組裝,proxy-target-class指定代理型別 cglib true JDK false-->
<aop:aspectj-autoproxy proxy-target-class="false"/>
執行結果: