Spring的IOC和依赖注入(day003)

先说说什么是耦合关系
在这里插入图片描述上面的齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。
控制反转(IOC)
如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一,所以为了优化这个问题,软件专家Michael Mattson提出了IOC概念,用来实现对象之间的“解耦”,现在这个理论被运用得很广泛,很多J2EE项目均采用了IOC框架产品Spring。
概念
IOC是Inversion of Control的缩写—>控制反转。
简单来说,IOC就是将复杂系统分解成相互合作的对象,这些对象通过封装,内部实现对外部是透明的,可以被灵活地被重用和扩展,
解耦IOC理论提出的观点大体是,借助于“第三方”实现具有依赖关系的对象之间的解耦,对象ABCD将控制权交给IOC容器,相当于由主动获取对象,变成被动接受对象,这也是控制反转的由来。

Spring的核心机制–依赖注入

控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度,其中最常见的实现方式是依赖注入,还有一种是依赖查找。
依赖注入:让调用类对某一接口实现类的依赖关系由第三方(容器或者协作类)注入。
通常有的方式:
1、属性注入:IOC容器使用属性的Setter方法来注入被依赖的实例。

    <!-- set注入,通过value
    value表示值类型的注入,ref表示对象类型的注入-->
    <bean name="car" class="com.spring.entity.Car" lazy-init="true">
        <property name="name" value="AE86"></property>
        <property name="color" value="red"></property>
    </bean>

    <bean name="injectionP1" class="com.spring.entity.Person" lazy-init="true">
        <property name="name" value="sansui" ></property>
        <property name="age" value="19"></property>
        <property name="car" ref="car"></property>
<!--  ref="car"的car对应上面bean的name="car"      -->
    </bean>

2、构造注入:IOC容器使用构造器来注入被依赖的实例。

<!--构造方法注入-->
<bean name="injectionP2" class="com.spring.entity.Person" lazy-init="true">
<!-- index指定参数的位置,当构造方法有多个就可以用index指定位置   -->
<!-- type属性来区分数据类型   -->
    <constructor-arg name="name" value="lxh" index="0" type="java.lang.String"></constructor-arg>
    <constructor-arg name="age" value="22"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>

</bean>

3、P名称空间注入
先在头文件加上xmlns:p…;官方文档里面可以找到
在这里插入图片描述

<!-- p名称空间注入
    xmlns:p="http://www.springframework.org/schema/p"
    https://docs.spring.io/spring/docs/5.2.8.RELEASE/spring-framework-reference/core.html#databuffers
    p:属性名 表示值类型
    p:属性名-ref 表示引用类型
   -->
    <bean name="injectionP3" class="com.spring.entity.Person" lazy-init="true"
          p:name="testP"
          p:age="27"
          p:car-ref="car">
    </bean>

4、EL表达式注入

<!--EL表达式注入    -->
    <bean name="injectionP4" class="com.spring.entity.Person" lazy-init="true">
        <property name="name" value="#{injectionP1.name}"></property>
        <property name="age" value="#{injectionP1.age}"></property>
        <property name="car" ref="car"></property>

    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值