欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring_IOC

程序员文章站 2022-05-03 09:12:34
...

1. IOC和DI

1.1 IOC

IOC(Inversion of Control):反转控制。
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。

1.2 DI

DI(Dependency Injection):依赖注入。
IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。

1.3 IOC容器在Spring中的实现

  1. 在通过IOC容器读取bean的实例之前, 需要先将IOC容器本身实例化
  2. 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 继承

Spring_IOC

3.2 依赖

Spring_IOC

4. bean的作用域

  1. singleton: 单例(默认值),在IOC容器中,只有一个该bean的实例对象.并且该bean的对象会在IOC容器初始化的时候创建.
  2. prototype: 原型,在IOC容器中,有多个该bean的实例对象.不会在IOC容器初始化的时候创建,而是在每次getBean的时候才会创建一个新的对象返回.
  3. request:一次请求期间
  4. session:一次会话期间.

5. bean的生命周期

  1. 调用构造器创建对象
  2. 给对象的属性设置值
  3. 调用init方法进行初始化
  4. 使用对象
  5. 调用destroy方法进行对象的销毁.

Spring_IOC

6. bean的配置方式

6.1 全类名(反射)的方式

Spring_IOC

6.2 工厂方法

6.2.1 静态工厂方法

Spring_IOC

6.2.2 实例工厂方法

Spring_IOC

6.3 实现FactoryBean接口

Spring_IOC

7. 引入外部化的配置文件(管理连接池)

Spring_IOC

相关标签: javaee