java - 使用 Spring 连接不在列表中实现标记接口(interface)的 bean

标签 java spring dependency-injection autowired

我有一组扩展抽象类的类 Executor .假设这些类是 ExecutorOne , ExecutorTwoExecutorThree .然后,我有第四节课扩展 Executor类型,ExecutorFour , 而且还实现了接口(interface) NotUsable .

我正在使用 Spring 4.x 将上述所有 bean 的实例注入(inject)到列表中。

@Autowired
private final List<Executor> executors;

有没有什么机制可以让我不注入(inject) ExecutorFour 类型的 bean?在列表里面 executors ?我想要列表 executors只包含三个 bean,分别属于 ExecutorOne 类型, ExecutorTwoExecutorThree .

我试图查看 @Conditional 注释,但在这种情况下似乎没有用。

提前致谢。

最佳答案

还有另一种选择,它有助于实现您尝试的目标,但不会直接回答问题。

Spring没有这样的排除机制,毕竟4个bean都是有效的spring bean,都是被创建的。

但是,您可以使用 Usable 接口(interface),而不是 NotUsable 标记接口(interface)。这是一个(几乎不言自明的)示例:

interface Executor {}

interface UsableExecutor extends Executor {}

class Executor1 implements UsableExecutor{...}
class Executor2 implements UsableExecutor{...}
class Executor3 implements UsableExecutor{...}
class Executor4 implements Executor {}  // note, doesn't implement UsableExecutor

@Component
class SomeClassWithUsableExecutors {

   private final List<UsableExecutor> usableExecutors;

   // an autowired constructor - only 3 elements will be in the list 
   public SomeClassWithUsableExecutors(List<UsableExecutor> usableExecutors) {
      this.usableExecutors = usableExecutors;
   } 
}

关于java - 使用 Spring 连接不在列表中实现标记接口(interface)的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52277196/

相关文章:

java - 从 html 表单向 java 发送值不正确

java - 将数据表与交互相结合

java - 数据完整性违规异常 : could not insert

java - jhipster应用程序运行失败: Unsupported major.次要版本52.0

Spring Web Flow 请求映射

java - 尝试在 Spring Webflow 中渲染 View 时的 NPE

c# - .NET Core DI 中的异步提供程序

c# - 使用 CaSTLeWindsor 2.5.1.0 指定要在 ctor 注入(inject)中使用的依赖项

java - 在具有半径的二维数组上运行的算法

gwt - 如何通过 GIN 与 UiBinder 和小部件一起使用注入(inject)?