首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在新的抽象类中使用时,@Autowired字段为null

在新的抽象类中使用时,@Autowired字段为null
EN

Stack Overflow用户
提问于 2022-11-08 17:35:55
回答 1查看 22关注 0票数 0

我有一些正在工作的代码:

代码语言:javascript
运行
复制
@Component
public class MessageUtil {

    @Autowired
    @Qualifier("processMessages")
    private ReloadableConfig config;
    
    public String createMessage() {
        return config.getPropertyStr("message.simple.signature");
    }
}

在这里定义了bean processMessages

代码语言:javascript
运行
复制
<bean id="processMessages" class="com.company.framework.resources.ReloadableConfig">
    <property name="basename" value="classpath:com/company/aaa/bbb/domain/service/processMessages"/>
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="cacheSeconds" value="60"/>
</bean>

然后我创建了一些新的类:

代码语言:javascript
运行
复制
public abstract class MessageBuilder {
    @Autowired
    @Qualifier("processMessages")
    protected ReloadableConfig config;
    
    public abstract String createMessage();
}

@Component
public class SimpleMessageBuilder extends MessageBuilder {
    private String template;

    private void setTemplate() {
        template = config.getPropertyStr("message.simple.signature");
    }

    @Override
    public String createMessage() {
        setTemplate();
        return template;
    }
}

我现在有一个NullPointerException,因为在setTemplate()中,config是空的。第二个代码有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2022-11-08 21:52:21

@Autowired既不适用于字段,也不适用于抽象类的构造器。它适用于抽象类的setter,但要确保它是最终的,因为如果被具体的类覆盖,则类行为是不稳定的。抽象类不是组件扫描的,因为没有具体的子类就无法实例化它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74364951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档