我有一段代码在运行:
@Component
public class MessageUtil {
@Autowired
@Qualifier("processMessages")
private ReloadableConfig config;
public String createMessage() {
return config.getPropertyStr("message.simple.signature");
}
}
Bean processMessages
定义如下:
<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>
然后我创建了一些新类:
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
是空的。第二个代码中有什么问题?
1条答案
按热度按时间wbgh16ku1#
@Autowired既不适用于字段也不适用于抽象类的构造函数。它适用于抽象类的setter,但一定要使其成为final,因为如果被具体类覆盖,行为将不稳定。抽象类不会被组件扫描,因为没有具体子类就无法示例化。