SpringBoot AOP组合切点表达式

小感触 2020年02月27日 203次浏览

1.SpringBoot开启AOP支持:

1.1依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

1.2开启:

@EnableAspectJAutoProxy

1.3增强:

使用 && 以及 || 来组合所建立的几个Pointcut切点。

@Aspect
@Component
public class MonitorPlatformServiceEnhance {

    @Autowired
    private MonitorCenter monitorCenter;
    @Autowired
    private PlatformConfigCenter platformConfigCenter;

    @Pointcut("execution(public * com.banggood.ordermonitor.service.web.impl.MonitorPlatformServiceImpl.*(..)))")
    public void p1(){ }

    @Pointcut("@annotation(com.banggood.ordermonitor.annotation.RejectWithMonitor)")
    public void p2() { }

    @Before("p1() && p2()")
    public void before() {
        if (monitorCenter.getRunning()) {
            throw new BusinessException(ResponseType.ERROR, "订单监控服务正在执行,请稍候再试。");
        }
    }

    @After("p1() && p2()")
    public void after() {
        platformConfigCenter.refreshMonitorPlatformInfo();
    }

}