参考源
《Spring源码深度解析(第2版)》
版本
本文章基于 Spring 5.3.15
总流程
基本接口
IOC 容器两种实现方式:BeanFactory 和 ApplicationContext。
BeanFactory
容器的根接口,也是容器的入口。
Spring 内部使用的接口,不推荐开发人员使用。
加载配置文件的时候不会创建对象,在获取对象(使用)才去创建对象。
必须遵循完成的创建过程,这个过程是由 Spring 来管理控制的。
层级
BeanFactory 有两个比较重要的接口:ListacleBeanFactory 和 HierarchicalBeanFactory。
示例
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
FactoryBean
用于更加灵活的创建对象。
只需要调用 getObject
就可以返回具体的对象,整个对象的创建过程是由用户自己来控制的,更加灵活。
ApplicationContext
BeanFactory 的子接口
提供更多功能,一般由开发人员使用。
加载配置文件的时候就会按照配置文件创建对象。
FileSystemXmlApplicationContext 示例
ApplicationContext context = new FileSystemXmlApplicationContext("D:\\Project\\spring-framework\\spring-test\\src\\main\\resources\\applicationContext.xml");
ClassPathXmlApplicationContext 示例
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
FileSystemXmlApplicationContext 读取的是系统路径,需要输入文件全路径,繁琐且不灵活。
ClassPathXmlApplicationContext 读取是资源路径,输入相对于资源文件夹的路径即可,简单且灵活,推荐使用 ClassPathXmlApplicationContext。
示例
类
public class UserDao { public void add() { System.out.println("调用了添加方法"); }}
配置文件
官方推荐命名为 applicationContext.xml
使用
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = context.getBean(UserDao.class);userDao.add();
执行以上代码得到:
调用了添加方法