简体   繁体   English

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

[英]Understanding JavaBeans pattern (Abstract getter and setter)

I'm working on a web-application now and have the following class hiereachy: 我现在正在开发Web应用程序,并且具有以下类层次结构:

public class AbstractCreator{

    public Object create(){
        getCreateService().crete();
    }

    public abstract CreateService getCreateService();

    public abstract void setCreateService(CreateService createService);

}

Descendants: 子孙:

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;
    }
}

and

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;
}

where CreateService is just an interface: 其中CreateService只是一个接口:

public interface CreateService{
    public Object create();
}

The problem : I need to use the service in the abstract class but the information about the service is available only from concrete subclasses where we perform injection. 问题 :我需要在abstract class使用服务,但是有关服务的信息仅可从我们执行注入的具体子类中获得。 Is it correct to use abstract getter/setter in such circumstances? 在这种情况下使用抽象的getter / setter是否正确?

I mean, doesn't it contradict to the JavaBeans pattern? 我的意思是,这与JavaBeans模式不矛盾吗?

I don't really bother about the JavaBeans pattern - just renaming the methods will do. 我并不真正在意JavaBeans模式-重命名方法即可。

That said, I think the model itself doesn't seem right to me. 就是说,我认为模型本身对我来说似乎不合适。 An AbstractCreator requires CreatorService and as such the CreatorService should be part of the AbstractCreator . AbstractCreator需要CreatorService ,因此CreatorService应该是AbstractCreator一部分。 AbstractCreator can have a constructor that takes CreatorService as a parameter and use constructor injection in the subclasses to set it. AbstractCreator可以具有一个将CreatorService作为参数的构造函数,并在子类中使用构造函数注入对其进行设置。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM