自定义注解的理解和使用

   一直想写文章来着,因为之前不知道在什么地方写,今天找到了,写下我的第一篇文章

      之前觉的自定义注解很难,中间也学习了一段时间,因为平时用的不多也忘了,前段时间和同事下班聊天,他说写过,就好奇问了下,自定义注解我只会写一个注解,但是不知道怎么用,原以为加@interface的类就是自定义注解,可以使用,其实不然,这两天好奇看看自定义注解是怎么用,上网也查了一些资料和同事的帮忙,今天写个文章记录下来,文章会写的比较简单,主要是为了记录流程.

第一:自己自定义个注解类,只要在你的类上加上@interface,这样一个自定义的注解类就完成了

第二:写完自己定的注解类,这个时候还不能用,需要用响应的解析类来解析,这个时候需要用的Spring的一个接口,即HandlerMethodReturnValueHandler,这个接口中有两个方法如下:

    @Override
    public boolean supportsReturnType(MethodParameter returnType) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest) throws Exception {
        // TODO Auto-generated method stub
        
    }

自己写个类实现这个接口,在第二个方法中写如何去解析,具体的解析我也没有仔细的去分析,到网上找找会有很多,我也大概看了下,这个地方我眼高手低了,我自己会再后面找时间去看下,主要是觉得就是一堆的按照自己规则去解析,也没什么就没有细看了.

第三:这两个写好后,就可以使用了,再controller层入参的地方加上自己的注解(不仅仅 是入参,还可以加在属性上 方法上 类上),记得再xml文件(spring-servlet.xml)中加上这个配置:

 <mvc:annotation-driven conversion-service="conversionService">
        <mvc:argument-resolvers>
            <bean class="com.suning.cdpos.utils.web.MyHandlerArgumentResolver"/>
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

这个是返回的,返回的时候 对返回值进行处理

 <mvc:annotation-driven conversion-service="conversionService">

        <mvc:return-value-handlers>
            <bean class="com.suning.cdpos.utils.web.MyReturnValueResolver"></bean>
        </mvc:return-value-handlers>

  </mvc:annotation-driven>

上面的是第一版本 

1:自定义注解

2:@Aspect

@Configuration

@ConditionalOnProperty(name = "spring.xg.switch" havingValue = "true")

publice class CustomAnnotation{

        @Pointcut(value = "@annotation(com.xg.CustomAnnotation)")

        public void customMethod(){}

        @Around("customMethod()")

        public Object customAround(ProceedingJoinPoint joinPoint){

             Object   proceed = joinPoint.proceed();

                String methodName = joinPoint.getSignature().getName();

                String className = joinPoint.getSignature().getDeclaringTypeName();

                //获取入参name  value 

                Object [] values = joinPoint.getArgs();

                String [] names = ((CodeSignature) joinPoint.getSignature()).getParameterNames();

        }

}

使用在Controller方法上加制定的注解即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值