Springboot配置AOP

  1. AOP简介
    面向切面编程(Aspect-Oriented Programming, AOP)在系统运行时动态添加代码的方法称为面向切面编程(AOP)。Spring框架对AOP提供了很好地支持,在AOP中有一些常见的概念:
    (1)Joinpoint(连接点):类里面可以被增强的方法即为连接点,比如说,想修改哪个方法的功能,那么该方法就是一个连接点
    (2)Pointcut(切入点): 对Joinpoint进行拦截的定义即为切入点,例如:拦截所有已insert开始的方法,这个定义即为切入点
    (3)Advice(通知):拦截到Joinpoint 之后所要做的事情就是通知。例如:打印日志监控。通知分为前置通知、后置通知、异常通知、最终通知和环绕通知
    (4)Aspect(切面) Pointcut和Advice的结合
    (5)Target(目标对象) 要增强的类成为Target
  2. Springboot配置AOP
    (1)在springboot web项目中导入spring-boot-starter-aop依赖
        <!--引入AOP依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

(2)创建UserService类 作为测试功能

@Service
public class UserService {
	public String getUserById(Integer id){
		System.out.println("get...");
		return "user";
	}

	public void DelUserById(Integer id){
		System.out.println("delete...");
	}
}

(3)创建切面

@Component
@Aspect  //这是一个切面类
public class LogAspect {
	//切入点定义
	// 第一个* 任意返回值
	// 第二个* 任意类
	// 第三个* 任意方法
	// 括号两个点 表示任意参数
	@Pointcut("execution(* com.example.springbootstudy.service.*.*(..))")
	public void pc1(){

	}
	@Before(value = "pc1()")
	public void before(JoinPoint jp){
		String name=jp.getSignature().getName();
		System.out.println(name+"方法开始执行了");
	}

	@After(value = "pc1()")
	public void after(JoinPoint jp){
		String name=jp.getSignature().getName();
		System.out.println(name+"方法结束执行了");
	}

	@AfterReturning(value = "pc1()",returning = "result")
	public void AfterReturning(JoinPoint jp,Object result){
		String name=jp.getSignature().getName();
		System.out.println(name+"方法返回值为:"+result);
	}

	@AfterThrowing(value = "pc1()",throwing = "e")
	public void AfterThrowing(JoinPoint jp,Exception e){
		String name=jp.getSignature().getName();
		System.out.println(name+"方法抛异常了,异常时:"+e.getMessage());
	}

	@Around(value = "pc1()")
	public Object Around(ProceedingJoinPoint jp) throws Throwable {
		return jp.proceed();
	}
}

(4)Controller调用UserService中的方法,查看结果

@RestController
public class UserController {
	@Autowired
	UserService userService;
	@RequestMapping("/getUserById")
	public String getUserById(Integer id){
		return userService.getUserById(id);
	}
	@RequestMapping("/deleteById")
	public void delete(Integer id){
		userService.DelUserById(id);
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值