一、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 

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