一、AOP動態代理配置

AOP:指在程序運行期間,將某段業務diam切入到指定方法、指定位置進行運行的編程方式

 

1、導入AOP POM依賴

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aspects</artifactId>
	<version>4.3.12.RELEASE</version>
</dependency>

保證我們依賴中有aspects和aspectjwearver包 

 2、定義業務邏輯類

需求是在業務邏輯運行(之前、結束、異常,返回結果)等位置,記錄業務方法的相關日誌 。

 

3、定義日誌切面類

通知類型:前置通知、後置通知、返回通知、異常通知、環繞通知

前置通知(@Before):在目標方法運行之前運行。

後置通知(@After):在目標方法運行之後運行,無論方法正常結束,還是異常結束抽取公共的切入點表達式。

返回通知(@AfterReturning):在目標方法正常返回之後運行。如果異常調用異常通知。

異常通知(@AfterThrowing):在目標防範拋出異常運行。

環繞通知(@Around):動態代理,手動控制目標方法執行(JointPoint.proceed)

給切面類的目標方法標註何時何地運行。

//JoinPoint一定要出現在參數表的第一位

    @Before("pointCut()")
	public void logStart(JoinPoint joinPoint){
		Object[] args = joinPoint.getArgs();
		System.out.println(""+joinPoint.getSignature().getName()+"運行。。。@Before:參數列表是:{"+Arrays.asList(args)+"}");
	}
	
	@After("com.atguigu.aop.LogAspects.pointCut()")
	public void logEnd(JoinPoint joinPoint){
		System.out.println(""+joinPoint.getSignature().getName()+"結束。。。@After");
	}
	
	//JoinPoint一定要出現在參數表的第一位
	@AfterReturning(value="pointCut()",returning="result")
	public void logReturn(JoinPoint joinPoint,Object result){
		System.out.println(""+joinPoint.getSignature().getName()+"正常返回。。。@AfterReturning:運行結果:{"+result+"}");
	}
	
	@AfterThrowing(value="pointCut()",throwing="exception")
	public void logException(JoinPoint joinPoint,Exception exception){
		System.out.println(""+joinPoint.getSignature().getName()+"異常。。。異常信息:{"+exception+"}");
	}

 

 4、抽取公共的切入點表達式

    @Pointcut("execution(public int com.jetsen.aop.MathCalculator.*(..))")

    public void pointCut(){};

5、將切面類和業務邏輯類(目標方法所在類)都加入到容器中
 

@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
	 
	//業務邏輯類加入容器中
	@Bean
	public MathCalculator calculator(){
		return new MathCalculator();
	}

	//切面類加入到容器中
	@Bean
	public LogAspects logAspects(){
		return new LogAspects();
	}
}

6、Spring哪個類是切面類(給切面類上加一個註解:@Aspect)

7、給配置類中加 @EnableAspectJAutoProxy 【開啓基於註解的aop模式】

8、本節總結


      1)、將業務邏輯組件和切面類都加入到容器中;告訴Spring哪個是切面類(@Aspect)
      2)、在切面類上的每一個通知方法上標註通知註解,告訴Spring何時何地運行(切入點表達式)
      3)、開啓基於註解的aop模式;@EnableAspectJAutoProxy 

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