Spring 5.3 ClassPathScanningCandidateComponentProvider 扫描隔离 ClassLoader 中的类
在 Spring 5.3 中,ClassPathScanningCandidateComponentProvider 已经支持扫描指定的类加载器。具体做法如下:
- 创建一个自定义的类加载器,用于隔离需要扫描的类。
public class MyClassLoader extends URLClassLoader {
public MyClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent);
}
}
- 使用
ClassPathScanningCandidateComponentProvider的setResourceLoader方法设置自定义的类加载器。
MyClassLoader myClassLoader = new MyClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader());
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false, myClassLoader);
scanner.setResourceLoader(myClassLoader);
- 使用
ClassPathScanningCandidateComponentProvider的findCandidateComponents方法进行扫描。
Set<BeanDefinition> beanDefinitions = scanner.findCandidateComponents('com.example');
这样就可以扫描到指定类加载器中的类了。需要注意的是,这种方法可能会导致类加载器泄漏,因此需要谨慎使用。
原文地址: https://www.cveoy.top/t/topic/lIks 著作权归作者所有。请勿转载和采集!