SpringBoot AOP编程

SpringBoot AOP编程

  • 第一步:在POM文件中导入AOP依赖
  • 第二步:实现AOP切面
    • 1.使用@Aspect注解将类标注为切面类
    • 2.使用@Pointcut定义一个切入点,可以是一个规则表达式,比如是某个package下所有函数也可以是一个注解等
    • 3.为上一个步骤的切入点制定不同的通知:
      • @Before //方法执行前被调用
      • @After //方法执行后调用,无论方法执行是否成功
      • @AfterReturning //仅仅在方法成功完成后执行的通知
      • @AfterThrowing //在方法抛出异常退出时执行的通知
      • @Around //在方法执行之前和之后调用的通知

第一步:在POM文件中导入AOP依赖

<!--aop-->
<dependency>  
	<groupId>org.springframework.boot</groupId>  
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--spring 的aop默认是使用JDK代理,spring aop默认是使用JDK动态代理,即基于接口的代理,可以通过proxy-target-class属性修改。如果proxy-target-class=true, 那基于类的代理将起作用(这时需要cglib库)。即-->
<!--用来动态代理用的,基于类的代理-->
<dependency>  
	<groupId>cglib</groupId>  
	<artifactId>cglib</artifactId>  
	<version>3.2.12</version>
</dependency>

第二步:实现AOP切面

1.使用@Aspect注解将类标注为切面类

2.使用@Pointcut定义一个切入点,可以是一个规则表达式,比如是某个package下所有函数也可以是一个注解等

3.为上一个步骤的切入点制定不同的通知:

@Before //方法执行前被调用

@After //方法执行后调用,无论方法执行是否成功

@AfterReturning //仅仅在方法成功完成后执行的通知

@AfterThrowing //在方法抛出异常退出时执行的通知

@Around //在方法执行之前和之后调用的通知

//使用两个注解,标注这个类
@Aspect  //声明为切面类
@Component  //加入到IOC容器内
public class MyWebLogAspect{

	//仅仅声明一个切入点叫做myWebLog,而后,这个切入点要去execution(执行)拦截所有controller方法
	@Pointcut("execution(public * com.haoge.controller.*.*(..))" )
	public void myWebLog(){
	}

	//使用前置通知注解,并且要标注是那个切入点的前置通知,注意切入点包含名称加括号
	@Before("myWebLog()")
	public void doBefore(){
	System.out.println("------前置通知,定义的切入点之前---")
	}
	
	//与Before相似
	@After("myWebLog()")
	    	public void doAfter(){
	        	System.out.println("AOP after");
	    	}
	
	
	//与Before相似,但是括号标注内容不同,包含了value和returning
	@AfterReturning(value="myWebLog()",returning="result")
	public void doAfterReturning(Object result){
	//做你想做的事情
	}
}

你可能感兴趣的:(SpringBoot AOP编程)