我现在正在开发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作为参数的构造函数,并在子类中使用构造函数注入对其进行设置。

10-01 12:56