註解配置spring中的AOP

激活註解

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
		https://www.springframework.org/schema/context/spring-context.xsd">

		<context:component-scan base-package="jee.pk2"></context:component-scan>
    	
    	<!-- 激活Aspectj註解 -->
    	<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>

在通知類中加入註解

package jee.pk2;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
@Aspect//代表這個類是一個切面
public class DaoAdvice {
	//設置切入點
	@Pointcut("execution(* jee.pk1.*Impl.*(..))")
	public void daoPointcut() {};
	
	
	
	
	//前置通知
	//joinpoint爲鏈接帶點,代表的是
	
	@Before("daoPointcut()")
	public boolean before(JoinPoint jp) {
		System.out.println("前置通知"+jp.getSignature().toLongString()+"方法參數"+jp.getArgs());
		
		return true;
	}
	
	//後置通知
	@AfterReturning("daoPointcut()")
	public void afterReturning() {
		System.out.println("after target");
	}
	
	//環繞通知
	@Around("daoPointcut()")
	public Object around(ProceedingJoinPoint pjp) {
		System.out.println("around before returning");//前置同通知
		Object r=null;
		try {
			 r= pjp.proceed();
		} catch (Throwable e) {
			
			e.printStackTrace();
			System.out.println("arround after throwing target");//例外通知
		}finally {
			System.out.println("around after target");//最終通知;
			
		}
		System.out.println("around after returning target");//後置通知
		
		return r;
		
	}
	
	//最終通知
	@After("daoPointcut()")
	public void after() {
		System.out.println("after target");
	}
	
	//例外通知
	@AfterThrowing("daoPointcut()")
	public void afterTrowing() {
		System.out.println("after throwing");
	}
	
}

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