依赖注入方式
- 思考:向一个类中传递数据的方式有几种?
- 普通方法(set方法)
- 构造方法
- 思考:依赖注入描述了在容器中建立bean与bean之间关系依赖的过程,如果bean运行需要的是数字或字符串呢?
- 引用类型
- 简单类型(基本数据类型与String)
- 依赖注入方式
- setter注入
- 引用类型
- 简单类型
- 构造器注入
- 引用类型
- 简单类型
- setter注入
setter注入(引用类型)
-
在bean中定义引用类型属性并提供可访问的set方法
-
配置中使用property标签ref属性注入引用类型对象
setter注入(简单类型)
-
在bean中定义引用类型属性并提供可访问的set方法
-
配置中使用property标签value属性注入简单类型数据
构造器注入(引用类型)(了解)
-
在bean中定义引用类型属性并提供可访问的构造方法
-
配置中使用constructor-arg标签ref属性注入引用类型对象
构造器注入(简单类型)(了解)
- 在bean中定义引用类型属性并提供可访问的set方法
- 配置中使用constructor-arg标签value属性注入简单类型数据
构造器注入(参数适配)(了解)
-
配置中使用constructor-arg标签type属性设置按形参类型注入
-
配置中使用constructor-arg标签index属性设置按形参位置注入
依赖注入方式选择
- 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
- 可选依赖使用setter注入进行,灵活性强
- Spring框架倡导使用构造器,第三方框架内部大多数采用构造注入的形式进行数据初始化,相对严谨
- 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
- 实际开发过程中还需要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
- 自己开发的模块推荐使用setter注入
依赖自动装配
-
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
-
自动装配方式
- 按类型(常用)
- 按名称
- 按构造方法
- 不启用自动装配
-
配置中使用bean标签autowire属性设置自动装配的类型
依赖自动装配特征
- 自动装配用于引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
- 使用按名称装配时(byName)必须保障容器中具有指定的名称bean,因变量名与配置耦合,不推荐使用
- 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
集合注入
-
注入数组对象
-
注入List对象(重点)
-
注入Set对象
-
注入Map对象(重点)
-
注入Properties对象
案例:数据源对象管理(第三方资源配置管理)
-
导入druid坐标
-
配置数据源对象作为spring管理的bean
加载properties文件
- 开启context命名空间
-
使用context命名空间,加载指定properties文件
-
使用${}读取加载的属性值
-
不加载系统属性
-
加载多个properties文件
- 加载所有properties文件
- 加载properties文件标准格式
- 从类路径或jar包中搜索并加载properties文件
创建容器
- 方式一:类路径加载配置文件
- 方式二:文件路径加载配置文件
- 加载多个配置文件
获取bean
- 方式一:使用bean名称获取
- 方式二:使用bean名称获取并指定类型
- 方式三:使用bean类型获取
容器类层次结构图
BeanFactory初始化
- 类路径加载配置文件
- BeanFactory创建完成后,所有的bean均为延迟加载
小结
核心容器总结
容器相关
- BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
- ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
- ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
- ApplicationContext接口常用初始化类
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext