一次spring aop 切面的问题

本文详细介绍了如何使用Spring AOP进行控制器参数的统一验证,包括AOP切面的定义、切点的选择以及验证逻辑的实现。同时,文章还分享了配置过程中遇到的常见错误及解决方法。

  最新项目有个新需求,要在已经写好的controller里面 加上传入参数的验证,由于有多个 controller而且验证每个都要调用其他的服务,故决定采用spring的aop方式。

        1.添加aop的验证

        

@Component
@Aspect
public class VerifyCircle {

    private Logger logger = LoggerFactory.getLogger(this.getClass());
    public static final String shequnHost=SystemProperties.getInstance().getProperty("community.rpc.url");

    @Pointcut("execution(* cn.zm518.vip.action.ProductController.rmberTypeDetail(..))")
    public void pointCut(){

    }

    @Before("pointCut()")
    public void verifyCircle(JoinPoint joinPoint){

        System.out.println(joinPoint.getSignature().getName() + "传的参数是:{" + Arrays.asList(joinPoint.getArgs())+"}");

        String circleId = "";

        if (StringUtils.isBlank(circleId)){

          logger.info("circleId 为空!!!");

        }
        CircleClient circleClient = CircleClient.getInstance(shequnHost);



    }

    /*@After("")
    public void finish(){

    }*/

   /* @AfterThrowing(value = "pointCut()",throwing = "ex")
    public void verifyException(Exception ex){
        logger.debug("检查异常.... 异常信息是:{" + ex + "}");
    }*/
}

 

2.配置文件

   注意要在spring-mvc的xml文件里面添加,而不是applicationContext.xml文件添加。网上查找原因说是,applicationContext.xml被spring的ContextLoaderListenerClass加载为WebApplicationContext,此为一个父上下文,而加载spring-mvc是Dispatch-servlet,

此为一个子上下文。如果配置在applicationContext.xml,相当于在父上下文中配置,父上下文无法访问子上下文。

  

<!--开启aop注解 -->
    <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

3.启动tomcat 验证。。。 结果不行。

  自己原因主要是:

  

 @Pointcut("execution(* cn.zm518.vip.action.ProductController.rmberTypeDetail(..))")  ,一个自己配置某个方法时候,写成了public void cn.zm518.vip.action.ProductController.rmberTypeDetail() ,但是自己的controller里面是返回的ModelAndView视图
,第二个问题是 自己的方法带有参数,但自己写的是无参数的。所以一直不行。。。

转载于:https://www.cnblogs.com/thinkingandworkinghard/p/9360176.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值