Spring_IOC
程序员文章站
2022-05-03 09:12:34
...
Spring_IOC
1. IOC和DI
1.1 IOC
IOC(Inversion of Control):反转控制。
在应用程序中的组件需要获取资源时,传统的方式是组件主动
的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件
,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可
,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动
形式。
1.2 DI
DI(Dependency Injection):依赖注入。
IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。
1.3 IOC容器在Spring中的实现
- 在通过IOC容器读取bean的实例之前, 需要先将IOC容器本身实例化
- Spring提供了IOC容器的两种实现方式
(1)BeanFactory:IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
(2)ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。
2. 依赖注入(给bean的属性赋值)
2.1 注入的方式
2.1.1 set方法注入
<!-- 注册一个Person对象, Spring会自动创建这个Person对象 -->
<bean id = "person01" class="com.lz.bean.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="19"></property>
<property name="gender" value="男"></property>
</bean>
2.1.2 构造器注入
<bean id = "car1" class="com.lz.bean.Car">
<constructor-arg name="brand" value="BMW"></constructor-arg>
<constructor-arg name="crop" value="huanccehn"></constructor-arg>
<constructor-arg name="price" value="30000"></constructor-arg>
</bean>
2.2 可以使用的注入的值
2.2.1 字面量
2.2.2 null值
2.2.3 外部bean
2.2.4 内部bean
2.3 集合属性
2.3.1 数组和List
<bean id="person02" class="com.lz.bean.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="19"></property>
<property name="gender" value="男"></property>
<property name="cars">
<list>
<!--使用外部bean-->
<ref bean = "car1"/>
<!--使用内部bean-->
<bean class="com.lz.bean.Car">
<constructor-arg name="brand" value="BMW"></constructor-arg>
<constructor-arg name="crop" value="huanccehn"></constructor-arg>
<constructor-arg name="price" value="30000"></constructor-arg>
</bean>
</list>
</property>
</bean>
2.3.2 Map
<bean id = "person03" class="com.lz.bean.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="19"></property>
<property name="gender" value="男"></property>
<property name="carMap">
<map>
<entry key="AA" value-ref="car1"/>
<entry key="BA" value-ref="car1"/>
</map>
</property>
</bean>
2.3.3 Properties
3. bean之间的关系
3.1 继承
3.2 依赖
4. bean的作用域
- singleton: 单例(默认值),在IOC容器中,只有一个该bean的实例对象.并且该bean的对象
会在IOC容器初始化的时候创建.
- prototype: 原型,在IOC容器中,有多个该bean的实例对象.不会在IOC容器初始化的时候创建,而是
在每次getBean的时候才会创建一个新的对象返回
.- request:一次请求期间
- session:一次会话期间.
5. bean的生命周期
- 调用构造器创建对象
- 给对象的属性设置值
- 调用init方法进行初始化
- 使用对象
- 调用destroy方法进行对象的销毁.