2015-08-19 19 views
0

我工作的一個Web應用程序現在有下面的類hiereachy:瞭解JavaBeans的模式(摘要getter和setter)

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模式不矛盾嗎?

回答

2

我真的不知道JavaBeans模式 - 只是重命名的方法會做。

這就是說,我認爲模型本身並不適合我。 AbstractCreator要求CreatorService,因此CreatorService應該是AbstractCreator的一部分。 AbstractCreator可以有一個構造函數,它將CreatorService作爲參數,並在子類中使用構造函數注入來設置它。

+0

事實上,關於構造函數的想法聽起來不錯。謝謝。 –