目录
1、容器
这里所说的核心容器,大家可以把它简单的理解为
ApplicationContext,接下来咱们从以下几个问题入手来学习下容器的相关知识:
- 如何创建容器?
- 创建好容器后,如何从容器中获取bean对象?
- 容器类的层次结构是什么?
- BeanFactory是什么?
1.1、容器的创建方式
(1)类路径下的XML配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
(2)文件系统下的XML配置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
说明:这种方式虽能实现,但是当项目的位置发生变化后,代码也需要跟着改,耦合度较高,不推荐使用。
1.2、Bean的三种获取方式
方式一:
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
方式二:
BookDao bookDao = ctx.getBean("bookDao",BookDao.class);
方式三:
BookDao bookDao = ctx.getBean(BookDao.class);
1.3、容器类层次结构
(1)在
IDEA
中双击
shift
,
输入
BeanFactory
(2)点击进入BeanFactory类,ctrl+h,就能查看到如下结构的层次关系
1.4、BeanFactory的使用
使用
BeanFactory
来创建
IOC
容器的具体实现方式为
:
public class AppForBeanFactory {
public static void main(String[] args) {
Resource resources = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resources);
BookDao bookDao = bf.getBean(BookDao.class);
bookDao.save();
}
}
出
BeanFactory
和
ApplicationContext
之间的区别。如果不去获取bean
对象,会发现:
- BeanFactory是延迟加载,只有在获取bean对象的时候才会去创建
- ApplicationContext是立即加载,容器加载的时候就会创建bean对象
- ApplicationContext要想成为延迟加载,只需要按照如下方式进行配置
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" lazy-init="true"/>
2、核心容器总结
2.1 容器相关
- BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
- ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
- ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
- ApplicationContext接口常用初始化类: ClassPathXmlApplicationContext(常用)
2.2 Bean相关
2.3 依赖注入相关