springmvc 自定义注解 以及自定义注解的解析

Posted joe立

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmvc 自定义注解 以及自定义注解的解析相关的知识,希望对你有一定的参考价值。

1,自定义注解名字

@Target({ElementType.TYPE, ElementType.METHOD})   //类名或方法上
@Retention(RetentionPolicy.RUNTIME)//运行时

@component//自定义多个注解,且在一个类中添加两个或以上的,只需要加一个 否则会实例化多次。
public @interface SocketMapping {
 String value() default "";//参数
}

2.测试类


@SocketMapping("/a")
public class TestAnno {

 @SocketMapping(value="/b")
 public void ss(){
  System.out.println(11);
 }
 
}

3,解析测试类所在的包,反射

ResourcePatternResolver rpr = new PathMatchingResourcePatternResolver();
  

   Resource[] res = rpr.getResources("classpath*:websocket/**.class");//测试类的包
   
   for(int i=0;i<res.length;i++){
    String className = res[i].getURL().getPath();
    className = className.split("(classes/)|(!/)")[1];
    className = className.replace("/", ".").replace(".class", "");//获取到文件结构  com.xl.joe.testAnno
    Class<?> cla = Class.forName(className);//获取到文件类
    
     if(cla.isAnnotationPresent(SocketMapping.class)){//判断是否存在自定义注解
      System.out.println(cla.getAnnotation(SocketMapping.class).value());//获取自定义注解的属性值
      
     }
     
     Object o = SpringContextUtil.getBean("testAnno");//获取类对象
     
     Method[] methods = cla.getMethods();//获取类的方法
     for(Method method:methods){
      if(method.isAnnotationPresent(SocketMapping.class)){//找到自定义注解
       method.invoke(o, new Object[]{});//反射改方法
      }
     }
    
   }

以上是关于springmvc 自定义注解 以及自定义注解的解析的主要内容,如果未能解决你的问题,请参考以下文章

springmvc里面自定义注解实现aop,controller层里面注解一直不生效,但是注解放在service层又可以??

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定

SpringAOP的自定义注解实践

SpringBoot自定义校验注解

注解和自定义注解

SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件