我承认我对Spring很陌生。我在一个Sping Boot 应用程序中工作,我正在使用一些旧代码。有很多DAO类,其中构造函数将通过重写抽象方法来示例化抽象类,如下所示
@Component("exampleDAO_1") // the DAO classes are already managed by Spring
public class ExampleDAO_1 implements IExampleDAO_1 {
...
private static final String PROPERTY_NAME = "property_name_1";
AbstractClass property;
public ExampleDAO_1() {
property = new AbstractClass() {
@Override
protected String abstractMethod() {
return PROPERTY_NAME;
}
};
}
...
}
抽象类看起来像这样
public abstract class AbstractClass {
@Value("${spring.profiles.active}") // Ultimately I want the class managed by Spring so I can access this value properly
private String activeProfile;
protected AbstractClass() {
this(true);
}
protected AbstractClass(boolean withEnvironment) {
...
// use abstractMethod() here to further set some other fields in the class
...
}
protected abstract String abstractMethod();
}
我想注入抽象类,而不是通过通常的new
关键字示例化它并覆盖抽象方法,这样我就可以让对象Spring管理。最好的办法是什么?
我试过让类具体化,然后将属性名传入构造函数,然后将值保存为类中的新字段,但我不确定从哪里开始,或者这是否是正确的开始方式。如果我问的或说的没有意义,我道歉。
1条答案
按热度按时间unguejic1#
你不能以通常的方式将Spring用于抽象类(即使用
@Component
和其他注解),因为抽象类不能在Java中示例化。但您可以执行以下操作:
使用这种方法,您可以手动将
AbstractClass
配置为Springbean。但是在AbstractClass
中,您仍然无法使用任何Spring注解,而是可以通过构造函数传递它们。在此之后,
AbstractClass
可以注入任何地方。我想唯一能做你想做的事的方法就是在上面。