我现在正在开发一个网络应用程序并拥有以下课程hiereachy:
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
模式不矛盾吗?
答案 0 :(得分:2)
我真的不关心JavaBeans
模式 - 只需重命名方法即可。
那就是说,我认为模型本身对我来说似乎并不合适。 AbstractCreator
需要CreatorService
,因此CreatorService
应该是AbstractCreator
的一部分。 AbstractCreator
可以有一个构造函数,它将CreatorService
作为参数,并在子类中使用构造函数注入来设置它。