首页 > 编程语言 > 详细

从C#到Java(Aspect)

时间:2019-03-08 14:16:20      阅读:178      评论:0      收藏:0      [点我收藏+]

1.pom.xml中导入依赖

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

 

2.创建class,并加入注解

 

@Aspect
@Component
@Slf4j
public class PayChannelAspect {
    private final String POINT_CUT = "execution(public * com.xx.xx.xx.service.xxService.*(..))";

    @Autowired
    private AppConfiguration appConfiguration;


    @Around(POINT_CUT)
    public Object doInvoke(ProceedingJoinPoint joinPoint) throws Throwable {
        var appId = Arrays.stream(joinPoint.getArgs()).findFirst().orElse("N");
        if (appId.equals("N")) {
            log.error("参数未传");
            return BaseResult.fail("参数未传");
        }
        var wxOpen = appConfiguration.getWx().equals("Y") ? true : false;
        var aliOpen = appConfiguration.getAli().equals("Y") ? true : false;
        if (!wxOpen) {
            if (appId.equals(appConfiguration.getWxAppId())
                    || appId.equals(appConfiguration.getMpAppId())) {
                log.info("微信支付通道已经关闭,参数:" + joinPoint.getArgs());
                return BaseResult.fail("微信支付通道已经关闭");
            }
        }
        if (!aliOpen) {
            if (appId.equals(appConfiguration.getAliAppId())) {
                log.info("支付宝支付通道已经关闭,参数:" + joinPoint.getArgs());
                return BaseResult.fail("支付宝支付通道已经关闭");
            }
        }
        return joinPoint.proceed();
    }
}

 

aspect包含四个注解,@Before,@After,@AfterReturning,@Around

  @Before  方法执行前

  @After 方法执行后,返回前

  @Afterreturning 方法返回

  @Around 环绕,从切面首先进入@Around -> @Before -> Method -> @Around -> @After -> @AfterReturning

如果有多个Aop切面拦截,需要在类上加入注解:@Order

从C#到Java(Aspect)

原文:https://www.cnblogs.com/LvJiaXuanBlogs/p/10495432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!