最近在使用spring框架进行web网站开发时使用的@Autowired值为空,研究了一下找到了解决办法。
1.先看spring配置文件是否进行了扫包
<context:component-scan base-package="">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
2.看spring配置文件中是否开启扫描了(看网上说这个也可以省略不知道真假)。
<context:annotation-config/>
3.如果这几步配置没有问题的话用junit测试应该是可以通过的。
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:application-context.xml")
public class SpringJunitTest {
@Autowired
//此处的装配的值应该不为空
}
4.如果这样发自动注入的值依旧为空那么很有可能和我出现了同样的问题
springMVC配置时扫描的是总包,也就是说将@Service标签下的类也都一并扫描了。
又因为springMVC是继承与spring的,当springMVC扫描后,spring不会进行扫描导致自动装载失败。我们只需要在springMVC配置文件中将 context:component-scan 的属性 use-default-filters 设置为false,关闭对spring的影响,问题解决。