小程序:扫描包中所有的类并获取每个类中特定的注解的值
2016-04-29 00:00
696 查看
摘要: 扫描包中所有的类并获取类中特定的注解的值
需求:今天做项目的时候,需要获取某个包下面所有的类里面的@Resources字段的名字以及所注入的接口所对应的路径
要是这文件夹只有几个Action的话,我倒是可以考虑直接手动,可是 有整整70多个Action,如果我手动输入的话岂不是要花很多很多时间,而且也不保证效率,于是乎就索性写了个小程序来得到这些数据
具体步骤代码如下:
一:获取指定包下所有的类
二:扫瞄类里面特定的注解所对应的类
源代码:
需求:今天做项目的时候,需要获取某个包下面所有的类里面的@Resources字段的名字以及所注入的接口所对应的路径
要是这文件夹只有几个Action的话,我倒是可以考虑直接手动,可是 有整整70多个Action,如果我手动输入的话岂不是要花很多很多时间,而且也不保证效率,于是乎就索性写了个小程序来得到这些数据
具体步骤代码如下:
一:获取指定包下所有的类
public static void scan(String packageName ,List<Class<?>> list) throws Exception{ //packageName为指定的目录如com.xxx.xxx String path="E:\\dev\\eachserver\\eachpre\\src\\main\\java\\com\\each\\http\\business\\action"; File dir=new File(path); File[] files=dir.listFiles(); //获取此目录下的文件列表 Class<?> cla=null; for(File f:files){ cla=Class.forName(packageName+"."+f.getName().split("\\.")[0]); list.add(cla);\\class添加进list } }
二:扫瞄类里面特定的注解所对应的类
public static void getAnnotion(List<Class<?>> list) throws Exception{ System.out.println(list.size()); //打印文件数量 Map<String,String> map = new HashMap<String,String>(); for(Class<?> cla:list){ Field[] field = Class.forName(cla.getName()).getDeclaredFields();\\获取class里面所声明的字段 for (Field field1:field){ if (field1.getAnnotation(Resource.class)!=null){ \\判断此字段是否有@Resource map.put(field1.getAnnotation(Resource.class).name(),field1.getType().getName()); \\以防重复 这个地方是用map储存 } } } for ( Map.Entry<String,String> entry:map.entrySet()){ // System.out.println("<dubbo:reference group=\""+entry.getKey()+"\" id=\""+entry.getKey()+"\" interface=\""+entry.getValue()+"\" version=\"1.0\"/>"); System.out.println(entry.getKey()+" "+entry.getValue()); \\遍历打印 } }
源代码:
package com.each; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by zhu on 2016/4/28. */ public class TestMain { public static void scan(String packageName ,List<Class<?>> list) throws Exception{ String path="E:\\dev\\eachserver\\eachpre\\src\\main\\java\\com\\each\\http\\business\\action"; File dir=new File(path); File[] files=dir.listFiles(); Class<?> cla=null; for(File f:files){//E:\dev\eachserver\eachpre\src\main\java\com\each\http\business\action if(f.isDirectory()){ String childName=packageName+"."+f.getName(); scan(childName, list); }else{ cla=Class.forName(packageName+"."+f.getName().split("\\.")[0]); list.add(cla); } } } public static void getAnnotion(List<Class<?>> list) throws Exception{ System.out.println(list.size()); Map<String,String> map = new HashMap<String,String>(); for(Class<?> cla:list){ Field[] field = Class.forName(cla.getName()).getDeclaredFields(); for (Field field1:field){ if (field1.getAnnotation(Resource.class)!=null){ map.put(field1.getAnnotation(Resource.class).name(),field1.getType().getName()); } } } for ( Map.Entry<String,String> entry:map.entrySet()){ // System.out.println("<dubbo:reference group=\""+entry.getKey()+"\" id=\""+entry.getKey()+"\" interface=\""+entry.getValue()+"\" version=\"1.0\"/>"); System.out.println(entry.getKey()+" "+entry.getValue()); } } public static void main(String[] args) throws Exception { List<Class<?>> list=new ArrayList<Class<?>>(); scan("com.each.http.business.action",list);//把这个对象的路径写入,就可以了。 getAnnotion(list); } }
相关文章推荐
- 第一个servlet小程序
- 微信支付 生成付款二维码链接 并生成支付二维码图片 .net C#
- 微信登陆debug 需要改变keystore
- 创建一个属于自己的微信订阅号
- 仿微信联系人列表字母侧滑控件
- 除微信顶部的“防欺诈盗号,请勿支付或输入qq密码”
- 小木的智慧屋--微信公众号的推广案例分析(1)
- 微信公众平台
- Android录制微信小视频
- 玩玩微信雷达扫描布局
- 不用集成微信sdk,直接客户端调起微信支付
- HTML5 调用手机相册和摄像头的方法并上传微信下测试通过
- # 微信公众号内支付(.Net版本)开发详尽流程分享
- 微信公众平台java开发教程之验证服务器有效性
- 自定义View——类似微信裁剪控件
- 微信 支付支付授权目录 修改
- 微信支付(20140923更新)商户支付密钥key的生成与设置
- Java中的微信公众号开发(一)
- PHP处理微信昵称emoji方法
- 微信支付 php 公众平台及移动端服务器