我有一组扩展抽象类Executor
的类。假设这些类是ExecutorOne
、ExecutorTwo
和ExecutorThree
。然后,我有第四个类扩展了Executor
类型,ExecutorFour
,但也实现了接口NotUsable
。
我使用Spring4.x将所有上述bean的实例注入到一个列表中。
@Autowired
private final List<Executor> executors;
是否有任何机制允许我不将ExecutorFour
类型的bean注入列表executors
中?我希望列表executors
只包含三个bean,分别是ExecutorOne
、ExecutorTwo
和ExecutorThree
类型。
我试着看一下@Conditional
注释,但在这种情况下似乎没有用。
提前谢谢。
发布于 2018-09-12 03:57:56
还有另一种选择,它可以帮助你实现你所尝试的,但不会直接回答这个问题。
Spring没有这样的排除机制,毕竟,所有4个bean都是有效的spring并被创建。
但是,您可以使用Usable
接口,而不是NotUsable
标记接口。下面是一个(几乎不言自明的)示例:
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;
}
}
发布于 2018-09-11 19:28:52
虽然Spring没有为@Autowired
提供“排除这些类”语法,但它以@Qualifier
的形式提供了“包含这些类”的支持。
其工作方式是创建一个自定义限定符,您将在类级别上将其应用于您希望在运行时成为Executor
类的@Autowired
类。Spring会做剩下的工作,以确保不需要的类不会进入列表:
上面所做的是,只有具有自定义@Usable
限定符的@Usable
类才会注入到executors
中。
https://stackoverflow.com/questions/52277196
复制