我现在正在开发Web应用程序,并且具有以下类层次结构:
public class AbstractCreator{
public Object create(){
getCreateService().crete();
}
public abstract CreateService getCreateService();
public abstract void setCreateService(CreateService createService);
}
子孙:
public class SubCreator extends Creator{
@Named("subCreateService") //I prefer using that annotation
// instead of the legacy @Autowired
private CreateService createService;
@Override
public CreateService getCreateService() {
return createService;
}
@Override
public void setCreateService(CreateService createService) {
this.createService = createService;
}
}
和
public class MegaSubCreator extends Creator{
@Named("megaSubCreateService")
private CreateService createService;
@Override
public CreateService getCreateService() {
return createService;
}
@Override
public void setCreateService(CreateService createService) {
this.createService = createService;
}
其中
CreateService
只是一个接口:public interface CreateService{
public Object create();
}
问题:我需要在
abstract class
中使用服务,但是有关服务的信息仅可从我们执行注入的具体子类中获得。在这种情况下使用抽象的getter / setter是否正确?我的意思是,这与
JavaBeans
模式矛盾吗? 最佳答案
我并不真正在意JavaBeans
模式-重命名方法即可。
就是说,我认为模型本身对我而言似乎不合适。 AbstractCreator
需要CreatorService
,因此CreatorService
应该是AbstractCreator
的一部分。 AbstractCreator
可以具有一个以CreatorService
作为参数的构造函数,并在子类中使用构造函数注入对其进行设置。