使用spring注释在派生类中设置基类的属性

时间:2011-08-08 09:51:20

标签: java spring annotations

我有一个基类,其属性应该在派生类中设置。我要使用注释。怎么可能? 我知道如何使用xml spring配置,但不能使用注释,因为我要在属性中编写它们?

以下是一些示例代码:

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 个答案:

答案 0 :(得分:2)

一些选项取决于Base的其他内容:

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

答案 1 :(得分:0)

字段的注释直接链接到类中的源代码。您可以通过Spring EL with-in @Value注释来执行您正在寻找的内容,但我认为复杂性会覆盖该值。

您可能需要考虑的模式是使用@Configuration批注以编程方式设置应用程序上下文。这样,您就可以定义注入基类的内容。