2种Spring的容器
<!--applicationContext.xml文件声明bean-->
<bean id="employeeDAO" class="dao.impl.EmployeeDAOImpl" />
1.BeanFactory容器
Spring最简单的容器,功能就只有IOC + DI.
@Test
public void dowork() {
//获得配置文件
Resource resource = new ClassPathResource("applicationContext.xml");
//启动容器
BeanFactory factory=new XmlBeanFactory(resource);
//获得容器中的对象 (3个方式)
EmployeeDAOImpl dao=factory.getBean("employeeDAO",EmployeeDAOImpl.class);
EmployeeDAOImpl dao=(EmployeeDAOImpl) factory.getBean("employeeDAO");
EmployeeDAOImpl dao=factory.getBean(EmployeeDAOImpl.class);
System.out.println(dao);
}
2.ApplicationContext容器
更全面的容器,
- IOC+DI+AOP
- 环境环境感知
- 国际化相关
- 统一的资源管理
- 支持web
@Test
public void dowork() {
//启动容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");
//获得容器中的对象 (3个方式)
EmployeeDAOImpl dao = ctx.getBean("employeeDAO",EmployeeDAOImpl.class);
System.out.println(dao);
}
3.两个容器的实例化机制
容器的作用就是将Bean实例化.但两个容器的实例化方式不同
BeanFactory容器:
- 延迟实例化:启动容器时候没有实例化对象.在使用到bean对象时,才创建对象;
- 应用启动快,使用慢.适合移动App
ApplicationContext容器:
- 迫切实例化:在启动容器就实例化bean对象.
- 应用启动慢,使用快,时候web.
- 声明一个bean需要延迟加载:
<bean lazy-init="true"/>
- 声明全部bean需要延迟加载:
<beans default-lazy-init="true"/>
Spring容器的加载过程
- 通过配置文件启动Spring容器
- 解析所有的
<bean>
元素,反射创建对应的实例对象 - 以id为key,实例为value 存入Spring容器
- 使用Spring容器.getBean(XX)来获取对象
Spring的测试环境
省去手动启动容器的过程直接从容器中取值.
//声明测试时候,要启动容器
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml") //手动启动时候,斜杠可以省,测试加载时候,斜杠别忘了
public class MyTest {
@Autowired //取值
private IEmployeeDAO dao;
@Test
public void dowork() {
System.out.println(dao);
}
}