Spring的IOC

1、Spring的IOC

1.1、实例化 Bean 的三种方式

第一种方式:使用默认无参构造函数(最为常用)

    <!--在默认情况下:
    它会根据默认无参构造函数来创建类对象。如果 bean 中没有默认无参构造函数,将会创建失败。
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/>
第二种方式:spring 管理静态工厂-使用静态工厂的方法创建对象

    /**
    * 模拟一个静态工厂,创建业务层实现类
    */
    public class StaticFactory {
    public static IAccountService createAccountService(){
    return new AccountServiceImpl();
    }
    }
    <!-- 此种方式是:
    使用 StaticFactory 类中的静态方法 createAccountService 创建对象,并存入 spring 容器
    id 属性:指定 bean 的 id,用于从容器中获取
    class 属性:指定静态工厂的全限定类名
    factory-method 属性:指定生产对象的静态方法
    -->
    <bean id="accountService"
     class="com.itheima.factory.StaticFactory"
     factory-method="createAccountService"></bean>


第三种方式:spring 管理实例工厂-使用实例工厂的方法创建对象
        /**
        * 模拟一个实例工厂,创建业务层实现类
        * 此工厂创建对象,必须现有工厂实例对象,再调用方法
        */
        public class InstanceFactory {
        public IAccountService createAccountService(){
        return new AccountServiceImpl();
        }
        }
        <!-- 此种方式是:
        先把工厂的创建交给 spring 来管理。
        然后在使用工厂的 bean 来调用里面的方法
        factory-bean 属性:用于指定实例工厂 bean 的 id。
        factory-method 属性:用于指定实例工厂中创建对象的方法。
        -->
        <bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
        <bean id="accountService"
         factory-bean="instancFactory"
         factory-method="createAccountService"></bean>

1.2、依赖注入(DI)的三种方式

第一种方式:构造函数注入

    <!-- 使用构造函数的方式,给 service 中的属性传值
        要求:
            类中需要提供一个对应参数列表的构造函数。
        涉及的标签:
            constructor-arg
        属性:
            index:指定参数在构造函数参数列表的索引位置
            type:指定参数在构造函数中的数据类型

            name:指定参数在构造函数中的名称 用这个找给谁赋值
            =======上面三个都是找给谁赋值,下面两个指的是赋什么值的==============
            value:它能赋的值是基本数据类型和 String 类型
            ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean
        -->
        <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
            <constructor-arg name="name" value="张三"></constructor-arg>
            <constructor-arg name="age" value="18"></constructor-arg>
            <constructor-arg name="birthday" ref="now"></constructor-arg>
        </bean>
        <bean id="now" class="java.util.Date"></bean>

第二种方式:set 方法注入

    <!-- 通过配置文件给 bean 中的属性传值:使用 set 方法的方式
        涉及的标签:
           property

        属性:
            name:找的是类中 set 方法后面的部分
            ref:给属性赋值是其他 bean 类型的
            value:给属性赋值是基本数据类型和 string 类型的
            实际开发中,此种方式用的较多。
        -->
        <bean id="accountService"  class="com.itheima.service.impl.AccountServiceImpl">
            <property name="name" value="test"></property>
            <property name="age" value="21"></property>
            <property name="birthday" ref="now"></property>
        </bean>
        <bean id="now" class="java.util.Date"></bean>
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!