Spring boot 未保留带有@PostConstruct-@自动连线的Spring引导侦听器
问题的正确答案:我的Spring boot 未保留带有@PostConstruct-@自动连线的Spring引导侦听器,spring-boot,Spring Boot,问题的正确答案:我的@Autowired数据和我在@PostConstruct方法中设置的任何内容都不会保留。在这种情况下,我可能误解了bean生命周期 这是我的班级: @Component public class HeaderInspector implements HandlerInterceptorAdapter { private static final Logger LOGGER = LoggerFactory.getLogger(HeaderInspector.class);
@Autowired
数据和我在@PostConstruct
方法中设置的任何内容都不会保留。在这种情况下,我可能误解了bean生命周期
这是我的班级:
@Component
public class HeaderInspector implements HandlerInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(HeaderInspector.class);
@Autowired
private ConfigurationService configuration;
@Autowired
private WaffleHeaderService waffleHeader;
private String logPrefix;
@PostConstruct
public void init() {
logPrefix = configuration.getLogPrefix("WaffleHeader");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// logs: "null Intercept"
LOGGER.trace(logPrefix + " Intercept");
// !!! NullPointException !!!
return waffleHeader.accept(request);
}
}
我用注释标记了两个问题区域。5美分:
@Autowired
属性不能为null
。。。只有在您自己构造实例(这使它们成为非spring管理的bean)或在未启用注释处理的上下文中使用它们时,它们才能为null
。一般来说,这是2个问题中的第一个,因为它不是一个spring管理的bean。我猜您有一个WebMVCConfigureAdapter
重写了addInterceptors
方法,并在该方法中执行注册表。addInterceptor(new HeaderInspector())
。5美分:@Autowired
属性不能为null
。。。只有在您自己构造实例(这使它们成为非spring管理的bean)或在未启用注释处理的上下文中使用它们时,它们才能为null
。一般来说,这是2个问题中的第一个,因为它不是一个spring管理的bean。我猜您有一个WebMVCConfigureAdapter
重写了addInterceptors
方法,并在该方法中执行registry.addInterceptor(new HeaderInspector())
。