通过反射获取SSM的controller层的注解以及注解中的value值
package com.reflection.test; import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.interview.Controller.ITVCController; public class Demo {
public static void main(String[] args) throws Exception, InvocationTargetException { //通过反射获取类的结构
Class<?> itvClass = ITVCController.class; //以下是类的注解信息 以及value值
System.out.println("以下是类的注解信息 以及value值"); //获取类的注解信息
Annotation[] annotations = itvClass.getAnnotations(); //遍历注解
for (Annotation annotation : annotations) { System.out.println(annotation.annotationType().getName()); //通过反射获取注解的类的结构信息
Class<? extends Annotation> annClass = annotation.getClass(); //获取注解的类的所有方法
Method[] methods = annClass.getDeclaredMethods(); //遍历注解的方法
for (Method annMethod : methods) { if("value".equals(annMethod.getName())){ //获取value值
Object invoke = annMethod.invoke(annotation); Class<? extends Object> class1 = invoke.getClass(); // 由于我测试的类是SSM的controller层 而controller层的类注解有 @Controller(value="测试")
// @RequestMapping(value="calendar")
// Controller 的value是String类型 RequestMapping 的value是String[]类型 所以我在猜出进行了一次判断 if("class java.lang.String".equals(class1.toString())){
System.out.println(annMethod.getName()+"====>"+invoke);
}else{
String[] Strings = (String[])invoke;
for (String string : Strings) {
System.out.println(annMethod.getName()+"====>"+string);
}
}
}else{ //输出该注解的方法名
System.out.println(annMethod.getName()); }
}
} //以下是类的方法的注解信息 以及value值
System.out.println("以下是类的方法的注解信息 以及value值"); //获取类的所有方法
Method[] methods = itvClass.getDeclaredMethods(); for (Method method : methods) { //以下注释同上
Annotation[] metannotation = method.getAnnotations(); for (Annotation annotation : metannotation) {
System.out.println(annotation.annotationType().getName());
Class<? extends Annotation> annClass = annotation.getClass();
Method[] annMethods = annClass.getDeclaredMethods();
for (Method annMethod : annMethods) {
if("value".equals(annMethod.getName())){
String[] invoke = (String[]) annMethod.invoke(annotation);
for (String string : invoke) {
System.out.println(annMethod.getName()+"====>"+string);
System.out.println();
}
}
}
}
} }
}
通过反射获取SSM的controller层的注解以及注解中的value值的更多相关文章
- spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403
1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...
- 使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......
Put aside the fog and see the essence 解决问题之前,要明白问题为什么会出现 我相信能点开这篇帖子的人,都是具有探索精神的人,因为,只有心存疑问才会搜索 如果只想单 ...
- .NET MVC通过反射获取数据修改历史记录,并插入数据表中
本文属于原创,转载时请标明出处! 折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射.折射怎么解.感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了.纪念一下. 1.核 ...
- Java自定义注解和运行时靠反射获取注解
转载:http://blog.csdn.net/bao19901210/article/details/17201173/ java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编 ...
- Spring MVC中,事务是否可以加在Controller层
一般而言,事务都是加在Service层的,但是爱钻牛角尖的我时常想:事务加在Controller层可不可以.我一直试图证明事务不止可以加在Service层,还可以加在Controller层,但是没有找 ...
- SpringBoot测试Controller层
一.准备工作 1.导入测试依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- spring Controller 层注解获取 properties 里面的值
前言:最近在做一个项目,想要在 controller 层直接通过注解 @Value("")来获取 properties 里面配置的属性. 这个其实和 springmvc.sprin ...
- 深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用
SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致 ...
- token获取在controller层中
集合判断是否为空 注意:token获取在controller层中,token中存的所有数据都要在controller中获取 在自己的接口里调用别的接口需要判断一下返回值是否为空
随机推荐
- IOS 之 PJSIP 笔记(二) iPJSUA 的简单使用
上一篇在编译完之后,就很不负责的结束了,本篇就对 PJSIP 库中提供的一个示例 iPJSUA 的使用,做一个简单的介绍.也能解除很多人对官方文档的一个困扰,起码我是被困扰过了. 首先,要确保你的 P ...
- C#中this的 四种 用法
C#中的this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码. this用法1:限定被相似的名称隐藏的成员 /// < ...
- [WCF实践]1.WCF使用net.tcp寄宿到IIS中
一.IIS部分 环境:Windows Server 2008 R2 1.安装WAS,如下图所示: 2.网站net.tcp协议绑定,如下图所示: 3.网站启用net.tcp,如下图所示: 二 ...
- DotNetCore跨平台~Startup类的介绍
新宠儿 DotNetCore是.net5.0版本,之所以不叫.net5.0为的就是不让我们把它与前面的.net混为一淡,它将是真正意义的跨平台开发语言,在网上也有相关介绍,中国的一些大牛也发了相关文章 ...
- 与众不同 windows phone (45) - 8.0 语音: TTS, 语音识别, 语音命令
[源码下载] 与众不同 windows phone (45) - 8.0 语音: TTS, 语音识别, 语音命令 作者:webabcd 介绍与众不同 windows phone 8.0 之 语音 TT ...
- php学习笔记:对文件的增删查改等操作
文件的创建: 采用touch()函数,当文件不存在会被创建 例如: <?php header("Content-type: text/html; charset=utf-8" ...
- angularjs post
/** * POST 1 * $http.post('http://localhost:8001/quickstart/task/create', { newTask: newTask }) */ / ...
- C# WM_NCMOUSELEAVE 消息触发
public static extern bool TrackMouseEvent([In, Out] TRACKMOUSEEVENT lpEventTrack); [DllImport(" ...
- django使用笔记
django的具体使用可以看官方手册http://djangobook.py3k.cn,这里主要记录使用django中遇到的问题. 1.中文编码问题. 因为我们用到的东西基本上都有中文,在settin ...
- 解析XML的几种方法之SAX解析
假期总结不能停,坚持坚持....接下来总结一下XMl和json的解析和生成.. 解析XML的四种方法,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址: DOM:在现 ...