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[]{});//反射改方法
      }
     }
    
   }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM