有没有一种方法可以自动装配名称带有特定后缀的组件?
假设我有这个interface
public interface Foo {
void bar();
}
我有一些实现该接口的具体类
@Component
public class AFooImpl1 implements Foo { ... }
@Component
public class SomeFooImpl1 implements Foo { ... }
@Component
public class OtherFooImpl2 implements Foo { ... }
现在我想要一个class
,它只能自动在List
或Set
内将名称以“ Impl1”结尾的具体类自动装配,如下所示:
public class Client {
@Autowired
private List<Foo> foos;
...
}
我该怎么做?
有这样的东西吗?
public class Client {
@Autowired
@Suffix("Impl1")
private List<Foo> foos;
...
}
还是这个?
public class Client {
@Autowired
@Qualifier(suffix("Impl1"))
private List<Foo> foos;
...
}
答案 0 :(得分:0)
我不知道您的建议是否可行。在您遇到的情况下我会怎么做:
public class Client {
private List<Foo> foos;
@Autowired(required = false)
public Client(List<Foo> myFoos) {
this.foos = myFoos.stream()
.filter(foo -> foo.getClass().getName().endsWith("Impl1"))
.collect(toList());
}
@Autowired(required = false)
public Client() {
this.foos = new ArrayList<>();
}
}
您将为所有Foo实例自动接线并对其进行过滤。这样,客户端将仅拥有所需的foos。