我正在开发一个项目,其中预先存在的代码有很多手动设置,并在 main 方法中完成了类的连接——这似乎是 Spring 擅长替换的完美示例。有几个对象共享一个父类 Widget。每个小部件都包含一个它所依赖的其他小部件的列表。
例如,如果您要在代码中编写此代码,它将类似于:
class Widget{ void addDependency(Widget w}{..}}
class A extends Widget{...}
...
class G extends Widget{...}
A a = new A();
...
G g = new G();
a.addDependency(b);
b.addDependency(c);
b.addDependency(d);
b.addDependency(f);
c.addDependency(g);
您显然不能只拥有一个@Autowired 小部件集合,因为那样您将获得所有小部件的集合。@Autowired 有没有办法过滤掉它,所以它只获取某些子类型的实例?
有两种我不喜欢的方法。第一种是连接所有非小部件 bean,并在加载上下文后将 Widget 集合连接在一起。另一种方法是使用 @Resource 连接 ApplicationContext 并使用 @PostConstructor 来获取你想要的需要来自ApplicationContext。两者看起来都不优雅,还有其他方法吗?