spring扫描本项目包下类数量 方法数量

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.util.ClassUtils;

import java.io.IOException;


@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class SchedulApplicationTests {

	private final String BASE_PACKAGE = "org.jeecg.modules";
	private final String RESOURCE_PATTERN = "/**/*Mapper.class";

	@Test
	void contextLoads() {
		int cnt = 0;
		//spring工具类,可以获取指定路径下的全部类
		ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
		try {
			String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
					ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + RESOURCE_PATTERN;
			Resource[] resources = resourcePatternResolver.getResources(pattern);
			//MetadataReader 的工厂类
			MetadataReaderFactory readerfactory = new CachingMetadataReaderFactory(resourcePatternResolver);
			for (Resource resource : resources) {
				//用于读取类信息
				MetadataReader reader = readerfactory.getMetadataReader(resource);
				//扫描到的class
				String classname = reader.getClassMetadata().getClassName();
				Class<?> clazz = Class.forName(classname);
				int length = clazz.getDeclaredMethods().length;
				cnt += length;
			}
			System.err.println(cnt);
		} catch (IOException | ClassNotFoundException ignored) {
		}
	}
}
posted @ 2023-10-11 16:04  qwer78  阅读(33)  评论(0)    收藏  举报