IOC容器
xml解析
反射
工厂模式
实现流程
- 配置xml文件, 配置需要创建的bean对象
- IOC容器通过xml解析获取属性值, 通过反射创建对象
IOC容器的两种接口
BeanFactory: 底层实现, 懒汉式创建对象
ApplicationContext: BeanFactory的子接口, 饿汉式创建对象
两种主要的实现方式: FileSystemXmlApplicationContext和ClassPathXmlApplicationContext

Bean管理
- 创建对象
- 注入属性
推荐方式: 通过空参构造和set()赋值来创建对象
可以通过p名称空间来简化set注入方式
Bean类型
普通Bean: 定义的class即为返回值类型
工厂Bean: 创建工厂类, 并实现FactoryBean接口, 在其中定义返回的Bean类型
Bean作用域
默认是单例模式
Spring
- 单例模式: 加载配置文件时创建对象, 饿汉式
- 原型模式: getBean()的时候创建对象. 也没有办法用懒汉式, 一开始也不知道要创建多少个.
Bean生命周期
无参构造
set方法赋值
后置处理器的postProcessBeforeInitialization方法
后置处理器为实现了BeanPostProcessor接口的类.
注意事项:
- 需要注入到IOC容器中才能生效
- 对所有的Bean对象都会生效
bean对象的初始化方法(xml中配置init-method参数)
后置处理器的postProcessAfterInitialization方法
获取并使用bean
当容器关闭时, 销毁bean对象(xml中配置destroy-method参数)
属性注入
xml方式: 方便理解底层逻辑
注解方式: 快捷开发
@Autowired: byType方式@Qualifier: byName方式@Resource: 默认使用byType方式, 指定name属性后变为使用byName方式@Value: 基本数据类型
通过属性注入的相关注解和自动装配的相关注解, 可以完全替代xml文件中的bean标签. 而添加主启动类[^1]可以开启注解支持, 组件扫描, 引入其他文件和配置类等.
xml中读取数据文件
<!--引入外部文件-->
<context:property-placeholder location="classpath:dataSource.properties"/>
[^1]:主启动类本身就是一个配置类, 配置类=配置文件