Spring实例化同一个Bean两次导致@Value值注入失败的问题
Spring实例化同一个Bean两次导致@Value值注入失败的问题
今天修改bug时遇到一个奇特的问题,一个类被其他类继承,在这个类上在其他的实现类上都注入成功了,然而在某一个特定的实现类上没有成功注入,刚开始我也以为是实现类多次注入父类这个字段的值,导致后面的类注入失败,修改代码,把值抽出来配置类中,发现还是没有注入进去。
跟踪调试Spring源码,发现这个类被创建了两次,第一次创建时候还是有值的,后一次创建时候没有注入成功,我这才发现是因为bean被多次初始化造成的。
经过一番百度和排查,最后发现原因在于Spring的 DispatcherServlet配置
<servlet> <servlet-name>springDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup>