理解JavaBeans模式(抽象getter和setter)

时间:2015-08-19 07:01:00

标签: java class interface javabeans

我现在正在开发一个网络应用程序并拥有以下课程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模式不矛盾吗?

1 个答案:

答案 0 :(得分:2)

我真的不关心JavaBeans模式 - 只需重命名方法即可。

那就是说,我认为模型本身对我来说似乎并不合适。 AbstractCreator需要CreatorService,因此CreatorService应该是AbstractCreator的一部分。 AbstractCreator可以有一个构造函数,它将CreatorService作为参数,并在子类中使用构造函数注入来设置它。