如何使用java代码加载指定包下面的所有类
2017-12-04 14:24
459 查看
如何加载指定包下面的所有类
使用代码来实现加载指定包下面的所有类配置文件config.properties(其位置在resource目录下)
page=cn.ishow
读取配置文件工具类
/** * 读取配置文件工具类 */ public abstract class ReadUtils { private static Map<String,Object> cache = new HashMap<>(); private static Properties properties = null; static { properties = new Properties(); try { properties.load(ReadUtils.class.getResourceAsStream("/config.properties")); } catch (IOException e) { e.printStackTrace(); } } public static Object read(String key){ Object value = cache.get(key); if(value==null){ synchronized (ReadUtils.class){ value = cache.get(key); if(value==null) { value = properties.get(key); cache.put(key, value); } } } return value; } }
主要类
package cn.ishow.manage.test; import java.io.File; import java.util.ArrayList; import java.util.List; public class LoadPageClassTest { /** * 解析包的全路径(比你的包路径为cn.ishow.test) * @param webPackage * @return */ public String resovlePackagePath(String webPackage) { // 扫码所有的包并把其放入到访问关系和方法放入到内存中 File f = new File(getClass().getResource("/").getPath()); String totalPath = f.getAbsolutePath(); System.out.println(totalPath); String pageName = getClass().getPackage().getName().replace(".", "\\"); totalPath = totalPath.replace(pageName, ""); String packagePath = webPackage.replace(".", "\\"); totalPath = totalPath + "\\" + packagePath; return totalPath; } /** * 解析包下面的所有类 * @param packagePath 上一步获取包的全路径 * @param webPackage 包(cn.ishow.test) * @return */ public List<String> parseClassName(String packagePath, String webPackage) { List<String> array = new ArrayList<>(); File root = new File(packagePath); resolveFile(root, webPackage, array); return array; } private void resolveFile(File root, String webPackage, List<String> classNames) { if (!root.exists()) return; File[] childs = root.listFiles(); if (childs != null && childs.length > 0) { for (File child : childs) { if (child.isDirectory()) { String parentPath = child.getParent(); String childPath = child.getAbsolutePath(); String temp = childPath.replace(parentPath, ""); temp = temp.replace("\\", ""); resolveFile(child, webPackage + "." + temp, classNames); } else { String fileName = child.getName(); if (fileName.endsWith(".class")) { String name = fileName.replace(".class", ""); String className = webPackage + "." + name; classNames.add(className); } } } } } public static void main(String[] args) { LoadPageClassTest test = new LoadPageClassTest(); String packageData = (String) ReadUtils.read("page"); String totalPath = test.resovlePackagePath(packageData); System.out.println(packageData +" "+totalPath); List<String> datas = test.parseClassName(totalPath,packageData); System.out.println(datas); } }
结果
[cn.ishow.manage.mapper.ITestEntityMapper, cn.ishow.manage.mongo.dao.IBaseDao, cn.ishow.manage.mongo.dao.impl.BaseDaoImpl, cn.ishow.manage.mongo.dao.impl.TestBeanDaoImpl, cn.ishow.manage.mongo.dao.impl.UserBeanDaoImpl, cn.ishow.manage.mongo.dao.ITestBeanDao, cn.ishow.manage.mongo.dao.IUserBeanDao, cn.ishow.manage.redis.RedisCache, cn.ishow.manage.service.impl.TestBeanServiceImpl, cn.ishow.manage.service.impl.TestEntityServiceImpl, cn.ishow.manage.service.impl.UserBeanServiceImpl, cn.ishow.manage.test.LoadPageClassTest, cn.ishow.manage.test.ReadUtils, cn.ishow.manage.weixing.WeiXingUtils]
有了这些类全名称,我们就可以利用反射获取该类,并进行一系列操作。由于本人有点忙,很多人用csdn提问我都没回,如果有问题qq发消息本人qq863224759。下篇将写本人简单模拟springmvc的实现
相关文章推荐
- 市面上所有号称"虚拟机","防火墙"的实时监控杀毒软件无一不是使用的IFSHOOK技术.但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控.下面给出用VTOOLSD写的代码.也就是所有实时杀毒软件的奥秘.同时,很多拦截文件操作的软件,例如对目录加
- 请教:A和B是两个tstringlist,如何除去B里面所有与A里面相同的项目?用下面的代码为什么会出错呢?
- 使用JDBC-ODBC方式连接数据库时,如何在代码中指定ODBC数据源信息
- 如何使用jQuery去掉指定标签里所有文字内容对应的链接,即去掉<a>标签
- 配置----Hibernate可配置的编程方式,驱动、URL、数据库访问岁用户名、密码等用使用Java代码手动加载!
- .“在JAVA中,异常子类必须在它们任何父类之前使用,因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,后面运行子类的catch语句将永远不会到达。而且,Java中不能到达的代码是一个错误。”
- 如何将指定文件夹下的所有报表文件循环加载到GridView空间中 并且打开某条数据
- JAVA代码:得到指定主机的所有IP
- 使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- 如何使用jquery动态加载js,css文件实现代码
- C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- 如何使用Rose将类图转化为java代码
- 使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- [jQuery代码]如何使用javascript/jQuery预先加载图片
- 如何使用java代码来访问managed-bean 的属性?
- 如何使用C语言搜索指定目录下的所有文件?
- oracle调用java方法的例子(下面所有代码都是在sql/plus中写)
- 如何使用java代码获取RSS中信息
- oracle调用java方法的例子(下面所有代码都是在sql/plus
- 一个使用多线程删除指定目录及子目录下所有指定文件的Java程序(源码)