我们可以使用抽象类来保存自动装配的公共成员变量。这是扩展抽象类的类,不需要再次声明成员字段。这是一个很好的设计模式吗?如果不是,有什么更好的方法来实现这一目标? 注意:抽象类没有任何方法。
abstract class Abs {
@autowired
protected ClassA varA;
@Autowired
protected ClassB varB;
@Autowired
protected ClassC varC;
...
}
class My1 extends Abs {
public void methodA() {
//make call
varA.aCall()
varB.bCall()
varC.cCall()
}
答案 0 :(得分:0)
由于您在评论中说“抽象类的唯一原因是保存公共共享成员变量”,因此没有理由为此目的使用抽象类继承。如果没有要求自动装配变量,我会说它们在接口中声明为public static final
,这不需要实现,因为你可以静态地引用它们。由于它们确实需要自动装配,并且你不能自动装配静态变量,我建议将它们放在专用于保存变量的bean中,并将该bean作为需要它们的每个类中的局部变量,在那里你将使用抽象继承。这符合composition
的模式,这是继承的一种更轻量级的替代方法。