2011-08-08 81 views
1

我有一個基類,應該在派生類中設置屬性。我必須使用註釋。那可能怎麼樣? 我知道如何做到這一點與XML彈簧配置,但沒有註釋,因爲我要寫在屬性?在派生類中設置基類的屬性,使用彈簧註釋

下面是一些示例代碼:

public class Base { 
    // This property should be set 
    private String ultimateProperty; 

    // .... 
} 

public class Hi extends Base { 
    // ultimate property should be "Hi" in this class 
    // ... 
} 

public class Bye extends Base { 
    // ultimate property should be "Bye" in this class 
    // ... 
} 

這怎麼可能與註解?

+2

任何理由不只是調用的setter在你的構造函數中? –

+0

'private String ultimateProperty'不是一個屬性,它是一個字段。術語在這些問題中很重要。你的意思是一個領域,還是你的意思是一個屬性(即與getter /和/或setter)? – skaffman

回答

2

取決於什麼其他基地的一些選項有:

class Base { 
    private String ultimateProperty; 

    Base() { 
    } 

    Base(String ultimateProperty) { 
     this.ultimateProperty = ultimateProperty; 
    } 

    public void setUltimateProperty(String ultimateProperty) { 
     this.ultimateProperty = ultimateProperty; 
    } 
} 

class Hi extends Base { 
    @Value("Hi") 
    public void setUltimateProperty(String ultimateProperty) { 
     super.setUltimateProperty(ultimateProperty); 
    } 
} 

class Bye extends Base { 
    public Bye(@Value("Bye") String ultimateProperty) { 
     setUltimateProperty(ultimateProperty); 
    } 
} 

class Later extends Base { 
    public Later(@Value("Later") String ultimateProperty) { 
     super(ultimateProperty); 
    } 
} 

class AndAgain extends Base { 
    @Value("AndAgain") 
    private String notQuiteUltimate; 

    @PostConstruct 
    public void doStuff() { 
     super.setUltimateProperty(notQuiteUltimate); 
    } 
} 

當然,如果你真的只是想在班上有名稱,然後

class SmarterBase { 
    private String ultimateProperty = getClass().getSimpleName(); 
} 
0

字段註釋直接鏈接到類中的源代碼。您可能能夠通過Spring EL使用@Value註釋來執行您正在尋找的內容,但我認爲複雜性會覆蓋該值。

您可能要考慮的模式是使用@Configuration註釋以編程方式設置您的應用程序上下文。這樣你可以定義什麼被注入到基類中。

相關問題