首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。

maven导入jar包:
<dependency> <groupId>org.reflections</groupId>
<artifactId>reflections</artifactId> <version>0.9.11</version> </dependency>
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId>
<version>21.0</version> </dependency>
一、用reflections的方式
public static List<String> clazzLis=new ArrayList<String>(); Reflections
reflections=new Reflections("testsunmet.imp.*"); //比如可以获取有Pay注解的class
Set<Class<?>> classes=reflections.getTypesAnnotatedWith(Pay.class);
for(Class<?> cl:classes){ Pay pay=cl.getAnnotation(Pay.class);
clazzList.add(cl.getCanonicalName())//使用list把获取到的class路径装起来 } }
二、使用递归file.list的方式
List<String> clzList=new ArrayList<>(); private void scanPackages(String
packageName){ //获取指定包的完整路径 String
packagesUrl=this.getClass().getClassLoader().getResource("/"+packageName.replaceAll("\\.",
"/")).getFile(); File scanFile=new File(packagesUrl); String[]
filenameList=scanFile.list(); for(String filename:filenameList){ File file=new
File(scanFile,filename); if(file.isDirectory()){
scanPackages(packageName+"."+filename); }else{ if(filename.indexOf(".class")>0)
clzList.add(packageName+"."+filename.replace(".class","")); } } }
个人推荐使用reflections。

 

1.使用
//使用class.forName获取对象 如Class clazz=Class.forName("xxxx.class");
//clazz.newInstance()使用创建对象
//使用clazz.isAnnotationPresent(xxx.class)判断是否式某种注解上的对象 //获取注解上的值
clazz.getAnnotation(xxx.class) //设置属性值 Field[]
declaredFields=clazz2.newInstance().getClass().getDeclaredFields(); for(Field
field:declaredFields){ field.setAccessible(true);//使可以set私有属性的值
//这只是测试,如果真正使用,注意set的值对应上 field.set(clazz2.newInstance(), "test"); } //获取方法
Method[] methods=clazz.newInstance().getClass().getMethods(); //执行对象中的方法
methods.invoke(执行对象,方法参数)