Spring IOC(Spring学习笔记二)

本文介绍了控制反转和依赖注入的概念,以及如何在Spring框架中通过XML配置和注解方式来实现对象的被动创建,不再由程序员直接控制对象实例化过程,达到解耦和简化代码的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前的模式是程序主动创建对象,控制权再程序员手上

使用set注入后,程序员不在具有主动性,而是变成了被动的接受对象

这种思想从本质上解决了问题,我们开发人员不用再去管理对象的创建。

ICO的本质:

控制反转IOC是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为Di只是ioc的一种说法。没有ioc的程序中,我们使用面向对象编程,对象的创建于对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

采用xml方式配置Bean的时候,Bean的定义信息和实现是分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

控制反转是一种通过描述(xml或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是loc容器,其实现方法是依赖注入(Dependency Injection,DI)。

用Spring来创建对象

先导入依赖spring webmvc的依赖(一般失去maven仓库去找)

   <!-- Spring webmvc依赖-->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.1.4</version>
    </dependency>

创建实体类(这里用到的是lombok注解偷懒,前面有笔记)

package com.li.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Hello {
    private String name;

}

创建Spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd">
    

</beans>

和以往创建对象的情况不一样了,这里用Spring的配置文件来创建对象,用Spring容器来给属性赋值

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
以前创建对象 类名 对象名 = new 类名();
Hello hello = new Hello();

用Speing配置文件创建对象
<bean/>标签相当于创建一个对象
id=接对象名称 class=接类的路径
<property />标签 就是属性标签
name=接属性名  value=接想要给属性赋的值
-->
        <bean id="user" class="com.li.pojo.Hello">
            <property name="name" value="张安"/>
        </bean>

</beans>

上面那种方式是无参构造函数来创建对象,下面通过有参构造函数来创建对象

<!--  通过有参构造方法创建对象  -->
<!--
方式一通过参数名来创建对象(这一种用的最多,也是最容易理解的)
 <constructor-arg/>标签中name=接参数名字,value=接想要给参数赋的值
-->
        <bean id="user1" class="com.li.pojo.Hello">
            <constructor-arg name="name" value="张三" />
        </bean>

<!--方式二
通过下标来创建对象
<constructor-arg/>标签中index=接参数的下表,从0开始,value=接想要给参数赋的值
-->
    <bean id="user2" class="com.li.pojo.Hello">
      <constructor-arg index="0" value="李四"/>
    </bean>

<!--方式三
通过类型来创建对象
<constructor-arg/>标签中,rype=接参数的数据类型的全名称,value=接想要给参数赋的值(这种方式不推荐,一旦有两个参数类型一样就用不了)
-->
    <bean id="user3" class="com.li.pojo.Hello">
        <constructor-arg type="java.lang.String" value="王五"/>
    </bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一年找不到工作就去厂里大螺丝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值