Spring
IoC控制反转(目的:充分解耦)
- 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转
Spring技术对IoC思想进行了实现
- spring提供了一个容器,称为IoC容器,用来充当IoC思想中的“外部”
- IoC容器负责对象的创建、初始化等一系列工作,被创建或管理的对象在IoC容器中称为Bean
DI依赖注入
- 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
IoC入门案例思路分析
- 管理什么?(假设Service业务层和Dao数据层)
- 如何将被管理的对像告诉IoC容器?(配置)
- 被管理的对象交给IoC容器,如何获取IoC容器?(接口)
- IoC容器得知后,如何从容器中获取bean?(接口方法)
- 使用Spring导入哪些坐标?(pom.xml)
-
- 导入Spring坐标
- 定义Spring管理的类
- 创建Spring配置文件,配置对应类作为Spring管理的bean
- 初始化IoC容器(Spring核心容器),通过容器用getBean方法获取bean
- 导入Spring坐标
DI案例
-
删除使用new的方式创建的Dao对象
-
提供依赖对象对应的setter方法
-
配置service与dao之间的关系
bean作用范围配置
- 适合造单例的bean:
- 表现层对象
- 业务层对象
- 数据层对象
- 工具对象
- 不适合造单例的bean:
- 封装实体的域对象
bean的实例化的三个方法
- 构造方法:提供一个可访问的构造方法,无参构造是默认的
- 使用静态工厂(不常用)
- 实例
bean 的生命周期
- 在IoC容器启动之后,并不会马上就实例化相应的bean,此时容器仅仅拥有所有对象的BeanDefinition(BeanDefinition:是容器依赖某些工具加载的XML配置信息进行解析和分析,并将分析后的信息编组为相应的BeanDefinition)。只有当getBean()调用时才是有可能触发Bean实例化阶段的活动
setter注入—简单类型
- 在bean中定义类型的属性并提供set方法
- 配置中property标签value属性注入简单类型的数据
构造器注入(和setter类似)
- 把setter注入里的set方法换成构造方法
- 把setter注入里的property标签换成constructor-arg标签
自动装配
- 提供定义好的引用类型的set方法
- bean标签里添加一个属性autowire=“byType(按类型)” 或者“byName(按名称)”
- 特点:
- 自动装配用于引用类型的依赖注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
- 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
- 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
集合注入