1. package com.reflection.test;
  2.  
  3. import java.lang.annotation.Annotation;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;
  6.  
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9.  
  10. import com.interview.Controller.ITVCController;
  11.  
  12. public class Demo {
  13. public static void main(String[] args) throws Exception, InvocationTargetException {
  14.  
  15. //通过反射获取类的结构
  16. Class<?> itvClass = ITVCController.class;
  17.  
  18. //以下是类的注解信息 以及value值
  19. System.out.println("以下是类的注解信息 以及value值");
  20.  
  21. //获取类的注解信息
  22. Annotation[] annotations = itvClass.getAnnotations();
  23.  
  24. //遍历注解
  25. for (Annotation annotation : annotations) {
  26.  
  27. System.out.println(annotation.annotationType().getName());
  28.  
  29. //通过反射获取注解的类的结构信息
  30. Class<? extends Annotation> annClass = annotation.getClass();
  31.  
  32. //获取注解的类的所有方法
  33. Method[] methods = annClass.getDeclaredMethods();
  34.  
  35. //遍历注解的方法
  36. for (Method annMethod : methods) {
  37.  
  38. if("value".equals(annMethod.getName())){
  39.  
  40. //获取value值
  41. Object invoke = annMethod.invoke(annotation);
  42.  
  43. Class<? extends Object> class1 = invoke.getClass();
  44.  
  45. // 由于我测试的类是SSM的controller层 而controller层的类注解有 @Controller(value="测试")
  46. // @RequestMapping(value="calendar")
  47. // Controller 的value是String类型 RequestMapping 的value是String[]类型 所以我在猜出进行了一次判断
  48.  
  49. if("class java.lang.String".equals(class1.toString())){
  50. System.out.println(annMethod.getName()+"====>"+invoke);
  51. }else{
  52. String[] Strings = (String[])invoke;
  53. for (String string : Strings) {
  54. System.out.println(annMethod.getName()+"====>"+string);
  55. }
  56. }
  57. }else{
  58.  
  59. //输出该注解的方法名
  60. System.out.println(annMethod.getName());
  61.  
  62. }
  63. }
  64. }
  65.  
  66. //以下是类的方法的注解信息 以及value值
  67. System.out.println("以下是类的方法的注解信息 以及value值");
  68.  
  69. //获取类的所有方法
  70. Method[] methods = itvClass.getDeclaredMethods();
  71.  
  72. for (Method method : methods) {
  73.  
  74. //以下注释同上
  75. Annotation[] metannotation = method.getAnnotations();
  76.  
  77. for (Annotation annotation : metannotation) {
  78. System.out.println(annotation.annotationType().getName());
  79. Class<? extends Annotation> annClass = annotation.getClass();
  80. Method[] annMethods = annClass.getDeclaredMethods();
  81. for (Method annMethod : annMethods) {
  82. if("value".equals(annMethod.getName())){
  83. String[] invoke = (String[]) annMethod.invoke(annotation);
  84. for (String string : invoke) {
  85. System.out.println(annMethod.getName()+"====>"+string);
  86. System.out.println();
  87. }
  88. }
  89. }
  90. }
  91. }
  92.  
  93. }
  94. }

通过反射获取SSM的controller层的注解以及注解中的value值的更多相关文章

  1. spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403

    1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...

  2. 使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......

    Put aside the fog and see the essence 解决问题之前,要明白问题为什么会出现 我相信能点开这篇帖子的人,都是具有探索精神的人,因为,只有心存疑问才会搜索 如果只想单 ...

  3. .NET MVC通过反射获取数据修改历史记录,并插入数据表中

    本文属于原创,转载时请标明出处! 折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射.折射怎么解.感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了.纪念一下. 1.核 ...

  4. Java自定义注解和运行时靠反射获取注解

    转载:http://blog.csdn.net/bao19901210/article/details/17201173/ java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编 ...

  5. Spring MVC中,事务是否可以加在Controller层

    一般而言,事务都是加在Service层的,但是爱钻牛角尖的我时常想:事务加在Controller层可不可以.我一直试图证明事务不止可以加在Service层,还可以加在Controller层,但是没有找 ...

  6. SpringBoot测试Controller层

    一.准备工作 1.导入测试依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  7. spring Controller 层注解获取 properties 里面的值

    前言:最近在做一个项目,想要在 controller 层直接通过注解 @Value("")来获取 properties 里面配置的属性. 这个其实和 springmvc.sprin ...

  8. 深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用

    SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致 ...

  9. token获取在controller层中

    集合判断是否为空 注意:token获取在controller层中,token中存的所有数据都要在controller中获取 在自己的接口里调用别的接口需要判断一下返回值是否为空

随机推荐

  1. VS用法总结

    工欲善其事,必先利其器,关于VS的“即时窗口”的使用: 打开“即时窗口”的快捷键是:Ctrl + Alt + I. 要在“即时窗口”中打印查看打印输出结果,必须按如下步骤设置:[工具]→[选项]→[调 ...

  2. Array(数组)与Json String (Json字符串) 的相互转换

    1.Array转换成Json String             function jsonToString(arr) {             var s = "";     ...

  3. wpf 查找页面的所有TextBox

    private void EnumVisual(Visual myVisual) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount( ...

  4. mysql防止重复插入记录方法总结

    mysql防止重复插入记录方法总结 防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了. ...

  5. ahjesus 部署lighttpd

    这个就不写了,直接传送门过去看,按照说的做就可以了 如果你想要安装最新版的,传送门 需要注意的是configure这一步,你看完他的help以后还要输入 ./configure 才能继续下一步 再就是 ...

  6. Mysql进阶(二)

    一.触发器 对某个表进行[增/删/改]操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行[增/删/改]前后的行为. 创建视图 # 插入前CREATE TRIGGER ...

  7. ubuntu定时执行脚本(crond)

    如果发现您的系统里没有这个命令,请安装下面两个软件包. vixie-cron crontabs crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表.-u ...

  8. Win10 FaceAPI小demo开发问题汇总

    Win10 FaceAPI小demo开发问题汇总 最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRand ...

  9. SHAREPOINT 工作流审批权限问题

    继续我们上次的工作流,我们发现所有人都有审批权限,这和我们正常的逻辑相反,正常应该是只有审批人才有权限,其它人只能查看,如下 这样解决,同样为SpecialPermissions 绑定到新成员 > ...

  10. IOS字典NSDictionary与NSMutableDictionary知识点

    字典中的元素是以键值对的形式存储的,键值对的键和值,都是任意的对象,但是键往往使用字符串,字典存储对象的地址没有顺序,字典的遍历分为:键的遍历和值的遍历,字典与数组的区别:数组讲究顺序,而字典可以快速 ...