2 回答

TA贡献1831条经验 获得超9个赞
你可以试试这个,它对我有用:
@SpringBootApplication
@ComponentScan(excludeFilters = {@ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE, classes = {WorkerConfig.class, WorkerExecutors.class, Worker.class})})

TA贡献1735条经验 获得超5个赞
Auto-config packages 位于 org.springframework.boot.autoconfigure 下。这就是你不能这样做的原因:
@SpringBootApplication(exclude= {WorkerExecutors.class, Worker.class,WorkerConfig.class})
春天做你吩咐做的事。您正在致电:
@ComponentScan(basePackages = {"com.adobe"}
, excludeFilters = {
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {WorkerConfig.class, WorkerExecutors.class, Worker.class})})
因此,Spring 不会加载任何这些 Worker 类。这就是为什么Spring不会“执行”用@Configuration注释的类。
也就是说,你试图做的事情对我来说没有意义。听起来你有“模块”(java类),但它们都是同一个弹簧上下文的一部分。如果你有一个Spring Context,那么你可以告诉Spring加载一些@Configuration类,而不是其他一些。然后,从您的“模块”中,您可以注入所需的任何内容。模块 1 将从模块 3 中注入 Bean,但模块 2 不会。就是这么简单。
如果由于某种原因,您确实需要阻止模块 2 从模块 3 访问 Bean,但仍然保持模块 3 从模块 1 中可见,那么我会将模块 1 和模块 2 分隔在两个不同的 Spring Boot 应用程序中,模块 3 成为通用代码。但这种方法可能会破坏您当前的架构。
更新 周五 3月 29 2019
试试这个:
@SpringBootApplication
@ComponentScan(basePackages = { "com.myapp" }, excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { MyClass2.class }) })
它对我有用。我有MyClass和MyClass2,MyClass被加载,MyClass2没有。我尝试使用Spring Boot 1.5.9.RELEASE和Spring Bom来获取所有依赖项。
添加回答
举报