@Component public class RuleDocTypeUtils { private static final Logger LOGGER = LoggerFactory.getLogger(RuleDocTypeUtils.class); private static DocTypeRuleServiceImpl staticService = new DocTypeRuleServiceImpl(); @Autowired private DocTypeRuleServiceImpl dynamicService; @PostConstruct public void init() { staticService = dynamicService; } ... }
可以看到,在init()方法中动态服务对象直接赋值给静态服务对象,正是这一行出了问题,如果改为使用set注入静态服务对象的方式,一样有这个问题
@Component public class RuleDocTypeUtils { private static final Logger LOGGER = LoggerFactory.getLogger(RuleDocTypeUtils.class); private static DocTypeRuleServiceImpl staticService = new DocTypeRuleServiceImpl(); @Autowired private DocTypeRuleServiceImpl dynamicService; @PostConstruct public void init() { setService(dynamicService); } private void setService(DocTypeRuleServiceImpl dynamicService) { setStaticService(dynamicService); } private synchronized static void setStaticService(DocTypeRuleServiceImpl dynamicService) { RuleDocTypeUtils.staticService = dynamicService; } ... }
原文:https://www.cnblogs.com/xhj123/p/12662388.html