今天学习spring注解的时候,用junit来测试
利用注解在容器中创建Student对象
然后用@Autowired注解进行自动装配
出现了空指针异常
原因
在Test方法执行的时候,并不会给你创建容器,junit也不知道你是否在使用spring,默认单例模式下没有容器也就不会有@Autowired自动装配有效
解决方案
- 导入 Spring 整合 Junit 的 jar包
在pom.xml中加入依赖
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
...
注意在使用5.x的spring依赖时,junit版本需要在4.12及以上
2. 使用 Junit 提供的一个注解 –@Runwith把原有的 main 方法替换了,替换成 Spring 提供
3. 告知 Spring 的运行器, Spring 和 ioc 创建是基于 xml 还是注解的,并且说明位置,用到的注解如下
@ContextConfiguration
Locations : 指定 xml 文件的位置,加上 classpath 关键字,表示在类路径下(适用于使用xml文件进行IOC)
classes : 指定注解类所在地位置(适用于你使用新创建的配置类取代xml文件进行IOC)
如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class test010 {
@Autowired
Student student;
@Test
public void test()
{
student.say();
}
}
运行结果
hello,Student