在 Spring 5.3 中,ClassPathScanningCandidateComponentProvider 已经支持扫描指定的类加载器。具体做法如下:

  1. 创建一个自定义的类加载器,用于隔离需要扫描的类。
public class MyClassLoader extends URLClassLoader {
    public MyClassLoader(URL[] urls, ClassLoader parent) {
        super(urls, parent);
    }
}
  1. 使用 ClassPathScanningCandidateComponentProvidersetResourceLoader 方法设置自定义的类加载器。
MyClassLoader myClassLoader = new MyClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader());
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false, myClassLoader);
scanner.setResourceLoader(myClassLoader);
  1. 使用 ClassPathScanningCandidateComponentProviderfindCandidateComponents 方法进行扫描。
Set<BeanDefinition> beanDefinitions = scanner.findCandidateComponents('com.example');

这样就可以扫描到指定类加载器中的类了。需要注意的是,这种方法可能会导致类加载器泄漏,因此需要谨慎使用。

Spring 5.3 ClassPathScanningCandidateComponentProvider 扫描隔离 ClassLoader 中的类

原文地址: https://www.cveoy.top/t/topic/lIks 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录