课程信息
- 学习课程:Java工程师2022版
- 章节名称:Spring Ioc容器与Bean管理-使用Java Config方式实现Spring Ioc
- 讲师:悟空
课程内容
基于Java Config配置IoC容器
1、基于Java Config的优势:
完全摆脱XML的束缚,使用独立Java类管理对象与依赖
注解配置相对分散,利用Java Config可对配置集中管理
可以在编译时进行依赖检查,不容易出错
2、Java Config核心注解:
@Configuration:描述类,说明当前类是Java Config配置类,完全替代XML文件
@Bean:描述方法,方法返回对象将被IoC容器管理,beanId默认为方法名
@ImportResource:描述类,加载静态文件,可使用@Value注解获取
@ComponentScan:描述类,同XML的context:component-scan标签。
@Configuration //当前类是配置类,完全替代文件applicationContext.xml
@ComponentScan(basePackages="com.imooc")
public class Config{
@Bean //Java Config利用方法创建对象,将方法返回对象放入容器,beanId=方法名
public UserDao userDao() {
UserDao userDao = new UserDao();
return userDao;
}
@Bean
//先按name尝试注入,name不存在则按类型注入
public UserService userService(UserDao userDao) {
UserService userService = new UserService();
userService.setUserDao(userDao);
return userService;
}
@Bean
public UserController userController(UserService userService){
UserController userController = new UserController();
userController.setUserServcie(userService);
return userController;
}
}
public class SpringApplication{
public static void main(String[] args){
//基于Java Config配置Ioc容器的初始化
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
String[] ids = context.getBeanDefinitionNames();
for(String id : ids){
System.out.println(id+ ":"+context.getBean(id));
}
}
}
javaconfig初始化ioc容器和注解初始化ioc容器的代码不冲突:也可以使用@scope,@primary注解,此时他们就写在config里对应的方法上了
javaconfig初始化ioc容器和注解初始化ioc容器的代码不冲突,代码可以一起使用不冲突:config文件上面加上@componentScan注解
使用注解的类:service里加上get好set方法config里:方法参数里加上依赖的对象,调用set方法注入对象
Java Config对象依赖注入相比于XML方式实际使用开发的体验较好,通过使用java代码配合注解完成注入,写错之后idea直接报错,弊端也是修改代码之后需要重新编译。
Spring Test测试模块:
Spring Test是Spring中用于测试的模块
Spring Test对JUnit单元测试框架有良好的整合
通过Spring Test可在JUnit在单元测试时自动初始化IoC容器
Spring与JUnit4整合过程:
Maven工程依赖spring-test
利用@RunWith与@ContextConfiguration描述测试用例类
测试用例类从容器获取对象完成测试用例的执行
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
//将Junit4的执行权交给Spring Test,在测试用例执行前自动初始化Ioc容器
@RunWith(SpringJunit4ClassRunner.class)
@ContextConfiguration(location={"classpath:applicationContext.xml"})
public class SpringTestor{
private UserService userService;
@Test
public void testUserService(){
userService.createUser();
}
}
测试用例执行前,ioc容器初始化过程中配置文件中的类就已经准备好了,测试用例类直接使用@Resource注入要使用的对象,然后在测试用例方法上添加@Test并在方法里直接调用该对象的方法完成测试即可。
学习收获
学习了使用java Config配置Spring Ioc和如何使用Spring 单元测试,整合Spring和Junit