我有一组扩展抽象类的类 Executor
.假设这些类是 ExecutorOne
, ExecutorTwo
和 ExecutorThree
.然后,我有第四节课扩展 Executor
类型,ExecutorFour
, 而且还实现了接口(interface) NotUsable
.
我正在使用 Spring 4.x 将上述所有 bean 的实例注入(inject)到列表中。
@Autowired
private final List<Executor> executors;
有没有什么机制可以让我不注入(inject) ExecutorFour
类型的 bean?在列表里面 executors
?我想要列表 executors
只包含三个 bean,分别属于 ExecutorOne
类型, ExecutorTwo
和 ExecutorThree
.
我试图查看 @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/