Tag: 组件扫描

如何从@ComponentScan包获取接口列表

我想实现类似于Spring Data的东西。 开发人员可以定义一些接口,向接口添加自定义注释以标记它们(我的代码将为接口创建代理实例)并通过@Autowire将它们用于必要的服务。 在spring初始化期间,我需要获取所有接口的列表(正确注释)<为接口创建动态代理并将它们注入到必要的位置。 代理创建,创建bean注入很好。 现在的问题是: 如何查找所有接口的列表? 它们可以放在任何包装中(或者甚至放在一个单独的jar子里)并且有任何名称。 扫描类路径上存在的所有类需要太多时间。 我找到了问题,但它需要基础包启动。 试过一个基于思考的解决方案,但它又要求基础包或者从root开始需要真正花费大量时间来扫描所有可用的类。 Reflections reflections = new Reflections(“…”); Set<Class> annotated = reflections.getTypesAnnotatedWith(); 所以我需要一个完整的基础包列表Spring扫描在包中找到我的接口(必须要快得多)。 该信息在SpringContext中绝对可用。 我尝试调试并查看basePackages []是如何初始化的,但是有很多私有类/方法用于初始化,我只是没有看到如何从ApplicationContext正确访问basePackages。

当ComponentScanning其他@SpringBootApplications时,SpringBootApplication排除

我在阻止Spring Boot自动配置某些类(在此示例中为SolrAutoConfiguration)时遇到了一些困难。 为了说明我设置了一个简化的例子: https://github.com/timtebeek/componentscan-exclusions 实际上,有20多个内部@SpringBootApplication项目,每个项目都有自己的依赖项。 (不理想/不是我的想法,但现在很难离开。) 出现问题的原因是多个子项目正在使用Solr 5.2.1,但Spring Boot仅与4.x兼容。 在最终的应用程序(示例中的module-b)中,我希望在所有模块中导入所有@SpringBootApplication类,同时阻止SolrAutoConfiguration运行: @ComponentScan(“project”) // Broad scan across all company jars @SpringBootApplication(exclude = { SolrAutoConfiguration.class }) // Failing exclude public class ModuleBApp { public static void main(final String[] args) { SpringApplication.run(ModuleBApp.class, args); } } 这失败了,因为在没有特定排除的情况下通过@ComponentScan获取的@SpringBootApplication任何实例仍然加载SolrAutoConfiguration 。 在组合多个@SpringBootApplication类时,如何正确排除自动配置类? 我已经尝试在最终的@SpringBootApplication上使用excludeFilters ,但这还没有找到解决方案。