Aop概念
什么是Aop呢,aop是面向切面编程,它能够对某些方法执行前,执行时,执行后进行一个操作。
Aop例子(通过execution方式)
package com.xiezihao.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Slf4j
@Component
//@Aspect Aop注解
@Aspect
public class WebUserAop {
//扫描切入点,这里扫描com.xiezihao.user.service包下所有的类和所有的方法以及任意参数
@Pointcut(value = "execution(* com.xiezihao.user.service.*.*(..))")
public void pointCut(){
}
// 目标pointCut方法执行前执行
@Before("pointCut()")
public void kaishiqian(){
log.info("开始前调用,执行kaishiqian()---WebUserAop");
}
// 目标pointCut方法执行后执行
@After("pointCut()")
public void zhixinghou(){
log.info("执行后调用,执行zhixinghou()---WebUserAop");
}
}
Aop例子(通过自定义注解annotation方式)
package com.xiezihao.aop;
@Configuration
@Aspect
@Slf4j
public class WebOrderAop {
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface OrderAop {
}
//扫描带有@OrderAop 的方法
@Pointcut("@annotation(com.xiezihao.aop.WebOrderAop.OrderAop)")
public void pointCut(){
}
@Before("pointCut()")
public void kaishiqian(){
log.info("开始前调用,执行kaishiqian()---WebOrderAop");
}
@After("pointCut()")
public void zhixinghou(){
log.info("执行后调用,执行zhixinghou()---WebOrderAop");
}
}
package com.xiezihao.order.service;
import java.util.List;
@RestController
//标注使用那个数据源
@DS(value = "xiezihao_order")
public class OrderService {
@Autowired(required = false)
private OrderMapper orderMapper;
//这里是自定义注解
@WebOrderAop.OrderAop
@GetMapping("/getOrderList")
public List<OrderEntity> getOrderList(OrderEntity orderEntity){
QueryWrapper<OrderEntity> queryWrapper = new QueryWrapper<OrderEntity>();
return orderMapper.selectList(queryWrapper);
}
}