我有一堂课需要
- 它使用的各种bean的依赖注入
- 初始化的运行时参数
该课程看起来与此类似
public class Validator {
@Autowired
private ServiceA serviceA;
@Autowired
private ServiceB serviceB;
private String s;
private ClassA a;
private ClassB b;
public void initialize(String s, ClassA a, ClassB b) {
this.s = s;
this.a = a;
this.b = b;
}
public void performTaskA() {
//use serviceA, serviceB, s, a and b
}
public void performTaskB() {
//use serviceA, serviceB, s, a and b
}
public void performTaskC() {
//use serviceA, serviceB, s, a and b
}
}
我可以通过哪些各种选项将上述类定义为spring bean(以利用依赖注入)并确保调用者在调用任何performTask *()方法之前调用initialize()?
注意 - 我知道Object getBean(String name, Object... args) throws BeansException;
但它看起来不太好,因为我们会失去类型安全性。还有其他建议吗?
更新 -这里提到的带有查找方法注入的解决方案是一个不错的选择。在春季实施之前,您对以下使用内部类的替代方案有何看法
public class MyService {
private ServiceA serviceA;
private ServiceB serviceB;
public class DataClass {
private Integer counter;
public DataClass(Integer counter) {
this.counter = counter;
}
public Integer performActionAndGetCount() {
serviceB.performAction();
return this.counter++;
}
}
}
//client module
MyService service = beanFactory.getBean("myService");
MyService.DataClass dataClass = service.new DataClass(1);
这种方法有什么缺点吗?