1.java使用类加载器获取注解的值

package com.bda.icetea;

import com.google.common.collect.Lists;

import org.apache.commons.collections.ListUtils;

import javax.persistence.Table;

import java.io.File;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

/**

*

* @author zhenhai.wan

* @Date 2021/7/2

*/

public class IceTeaClassUtil {

/**

* 根据路径获取class对象

    * @param path 路径

    * @param classPaths 存放class路径的集合

    * @param classLoader 类加载器

*/

    public static void getClasses(String path, List classPaths, ClassLoader classLoader){

//扫描包路径

        path = path.replace(".","/");

//获取根路径

        URL resource = classLoader.getResource(path);

//获取所有的.class文件

        getClassesByResource(resource.getFile(),classPaths);

}

/**

* 根据根路径扫描class加到class路径集合中

    * @param resourceFile 根路径

    * @param classPaths 存放class路径的集合

*/

    private static void getClassesByResource(String resourceFile, List classPaths) {

File file =new File(resourceFile);

for (File f : file.listFiles()) {

String s = f.getAbsolutePath();

//判断是不是class对象

            if(s.endsWith(".class")){

s = s.substring(s.indexOf("com"), s.indexOf(".class"));

s = s.replace("\\",".");

classPaths.add(s);

}else {

//todo 如果不是class对象我这里默认为目录,那么就直接递归了.可能实际上不是这样需要调试                getClassesByResource(s,classPaths);

}

}

}

public static void doSomething(List classPaths, ClassLoader classLoader){

//遍历所有的对象找出带有@Table注解的class对象

//对这些class对象做业务处理

        for (String s : classPaths) {

try {

Class cls = classLoader.loadClass(s);

//获取类中的所有的方法

                if(cls.isAnnotationPresent(Table.class)){

Table annotation = (Table) cls.getAnnotation(Table.class);

System.out.println(annotation.name().toUpperCase());

}

}catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

List classPaths = Lists.newArrayList();

ClassLoader classLoader = IceTeaClassUtil.class.getClassLoader();

//这里是具体扫描的包名

        getClasses("com.bda", classPaths, classLoader);

doSomething(classPaths, classLoader);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,...
    java小菜鸟阅读 2,625评论 0 15
  • 废话不多说,自己进入今天的主题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:...
    传奇内服号阅读 2,402评论 1 31
  • 背景介绍: 场景是,有京东三级分类名称,没有对应图标,需要根据京东三级分类名称,获取分类名称匹配的图片,来作为商品...
    柠檬冰块阅读 1,149评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,603评论 28 53