Spring 中的新注解
@Configuration
作用:指定当前类是一个配置类
细节:当配置类作为 AnnotationConfigurationApplicationContext 对象创建的参数时,该注解可以不写
@ComponentScan
作用:用于通过注解指定 Spring 在创建容器时要扫描的包
属性:
value : 它和 basepackages 的作用是一样的,都是用于指定创建容器时要扫描的包
使用此注解就等同于在 xml 中配置了:
<context:component-scan base-package="com.greyson"></context:component-scan>
@Bean
作用:用于把当前方法的返回值作为 bean 对象放入 Spring 的IOC容器中
属性:
name : 用于指定 bean 的 id,当不写时,默认值为当前方法的名称
细节:当我们使用注解配置方法时,
如果方法有参数,Spring 框架会去容器中查找有没有可用的 bean 对象,
查找的方式和 Autowired 注解的作用是一样的
@Import
作用:用于导入其他的配置类
属性:
value : 用于指定其他配置类的字节码
当我们使用 Import 的注解之后,有 Import 注解的类就是父配置类,而导入的都是子配置类
@Properties
作用:用于指定 properties 文件的位置
属性:
value : 指定文件的名称和路径
关键字:classpath , 表示类路径下
Spring 整合 Junit
为什么Spring 要整合 Junit?
- junit不会管是否采用spring框架,在执行测试方法时,junit根本不知道是不是使用了spring框架,所以也不会去读取配置文件和配置类来创建spring核心容器。
- 因此,当测试方法执行时,没有IoC容器,就算写了Autowired注解,也无法实现注入。
Spring 整合 Junit 的配置过程
-
导入 Spring 整合 Junit 的 jar ( 坐标 )
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.1.RELEASE</version> <scope>test</scope> </dependency>
-
使用 Junit 提供的一个注解把原有的 main 方法替换成 Spring 提供的
@Runwith
在Test类上注解,参数为Spring提供的继承了Runner的类,eg.SpringJUnit4ClassRunner.class
-
告知 Spring 的运行器, Spring 的 ioc 创建是基于 xml 还是注解的,并且说明位置,用到的注解如下
@ContextConfiguration在Test类上注解 Locations : 指定 xml 文件的位置,加上 classpath 关键字,表示在类路径下 classes : 指定注解类所在地位置
当使用 Spring 5.x 版本的时候,要求 JUnit 的 jar 必须是4.12及以上
-
使用@Autowired 给测试类中的变量注入数据