Spring的IoC控制反转和DI注入

目录

IOC控制反转:

依赖注入DI:

三种常见的注入方式:


IOC控制反转:

        IOC是Spring的核心之一,作用就是为了解耦,降低程序,代码之间的耦合度

        eg: dao层中有UserDao接口,dao.impl下有UserDaoImpl的实例对象(ioc方式)

                service层有UserService接口,service.impl下有UserServiceImpl实例对象(ioc方式)

        创建Spring的核心配置文件,如图:

       

         bean 标签: 用于配置类,托管类,其实就是让spring创建这个类的对象

         id  : 唯一标识,根据这个标识向spring调用这个类的对象

         class : 类的全路径,需要创建类对象的这个类的全路径

bean标签:

        用于配置,将对象交给spring进行控制,spring会帮我们创建对象

        默认(singleton,单例)情况下spring是调用类的无参构造来创建对象的,如果没有无参构造会报错

        (prototype)多例,一个spring容器里面有多个该bean对象

  • 不同scope的bean,生命周期:

    • singleton:bean的生命周期和Spring容器的生命周期相同

      • 整个Spring容器中,只有一个bean对象,问工厂要多少次对象,永远都是同一个

      • 何时创建:加载Spring配置文件,初始化Spring容器时,bean对象创建(只要创建工厂,就会创建这个对象!)

      • 何时销毁:Spring容器销毁时,bean对象销毁

    • prototype:bean的生命周期和Spring容器无关。Spring创建bean对象之后,交给JVM管理了

      • 整个Spring容器中,会创建多个bean对象,创建之后由JVM管理(每次问工厂要对象,得到的都是新的对象)

      • 何时创建:调用getBean方法获取bean对象时,bean对象创建(问工厂要对象的时候就创建对象)

      • 何时销毁:对象长时间不用时,垃圾回收

依赖注入DI:

        托管类里面有什么属性需要完成赋值工作,把这个赋值的工作交给spring来做。由spring把属性需要用到的值赋值(注入)进来就称之为依赖注入。

        有接口,有实现类,定义一个属性,并给属性提供一个set方法

        在托管|登记类的时候,要添加property标签。如果注入的是对象,那么要使用ref属性,如果注入的是普通的数据,那么要使用value属性

三种常见的注入方式:

set方式注入: 常用

        在类中提供需要注入的成员(依赖项)的set方法,在配置文件中注入属性的值

        <bean id=" " class=" ">
                    <property name="属性名" value="属性值"></property>
                    <property name="属性名" ref="bean的id"></property>
        </bean>

  • property标签:用在bean标签内部,表示要给某一属性注入数据

    • name:属性名称

    • value:要注入的属性值,注入简单类型值

    • ref:要注入的属性值,注入其它bean对象

构造方法注入:

        在类中提供构造方法,构造方法的每个参数就是一个依赖项,通过构造方法给依赖项注入值。

        <bean id="" class="">
                    <constructor-arg name="构造参数名称" value="构造参数的值"></constructor-arg>
                    <constructor-arg name="构造参数名称" ref="bean的id"></constructor-arg>
        </bean>

  • name:构造参数的名称

  • type:构造参数的类型

  • index:构造参数的索引

  • value:要注入的值,注入简单类型值

  • ref:要注入的值,注入其它bean对象

 p名称空间注入: 本质仍然是set方式注入

        在xml中引入p名称空间的约束, 然后通过`p:属性名称=""`来注入简单数据、使用`p:属性名称-ref=""`注入其它bean对象,它的本质仍然是set方法注入

        <bean id=" " class=" " p:属性名="简单值" p:属性名-ref="bean的id"></bean>

        普通属性注入:  p:属性名="属性值"
        对象属性注入: p:属性名-ref="bean的id值"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值