0


Spring中IOC详解

一、IOC的原型

IOC ----控制反转
在这里插入图片描述

比如我们有一个功能是获取用户数据,我们使用Dao层实现这个功能,再在Service层调用这个功能。但是我们每增加一个接口,比如获取mysql中的数据,就要修改原来的代码,如果再增加一个新的接口,又需要去service实现类中修改对应的实现。

解决方法

        用户实际调用的是业务层,dao层他们不需要接触
        UserServiceImpl userService =newUserServiceImpl();
        userService.setUserDao(newUserDaoImpl());
        userService.getUser();

利用set,我们可以通过传入参数,指定实现的是哪个接口。已经发生了根本性的变化 , 很多地方都不一样了 . 仔细去思考一下 , 以前所有东西都是由程序去进行控制创建 , 而现在是由我们自行控制创建对象 , 把主动权交给了调用者 . 程序不用去管怎么创建,怎么实现了 . 它只负责提供一个接口。

这种思想 , 从本质上解决了问题 , 我们程序员不再去管理对象的创建了 , 更多的去关注业务的实现 . 耦合性大大降低 . 这也就是IOC的原型 !

二、 IOC本质

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

在这里插入图片描述
IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
Spring容器在初始化时先读取配置文件,根据配置文件或元数据,创建并组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象。

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

三、实现一个简单的HelloSpring 理解IOC

  1. 导入spring依赖的jar包
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.14</version></dependency></dependencies>
  1. 编写一个Hello实体类
packagecom.lding.pojo;publicclassHello{privateString str;publicStringgetStr(){return str;}publicvoidsetStr(String str){this.str = str;}@OverridepublicStringtoString(){return"Hello{"+"str='"+ str +'\''+'}';}publicvoidshow(){System.out.println("Hello,"+str);}}
  • 编写我们的spring文件 , 这里我们命名为beans.xml
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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"><beanid="hello"class="com.lding.pojo.Hello"><propertyname="str"value="Spring111"></property></bean></beans>
  • 使用Spring来创建对象,在Spring这些都称为Bean
  • id=变量名
  • class 相当于new 的类
  • property 相当于给对象中的属性赋值
  1. 测试
publicclassMyTest{publicstaticvoidmain(String[] args){//解析beans.xml文件,生成管理相应的Bean对象ApplicationContext context =newClassPathXmlApplicationContext("beans.xml");//getBean:参数即为spring配置文件中的bean的idHello hello =(Hello) context.getBean("hello");
        hello.show();}}

运行结果
在这里插入图片描述

四、 思考

  • Hello 对象是谁创建的 ? 【 hello 对象是由Spring创建的 】
  • Hello 对象的属性是怎么设置的 ? 【hello 对象的属性是由Spring容器设置的 】 这个过程就叫控制反转 :
  • 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的
  • 反转 : 程序本身不创建对象 , 而变成被动的接收对象 .
  • 依赖注入 : 就是利用set方法来进行注入的.
  • IOC是一种编程思想,由主动的编程变成被动的接收

到了现在 , 我们彻底不用再程序中去改动了 , 要实现不同的操作 , 只需要在xml配置文件中进行修改, 所谓的IoC,一句话搞定 : 对象由Spring 来创建 , 管理 , 装配 !

如果对您有帮助,免费的赞点一个~~~感谢🙏

在这里插入图片描述

标签: spring java 后端

本文转载自: https://blog.csdn.net/qq_41359998/article/details/122495353
版权归原作者 冷丁_ 所有, 如有侵权,请联系我们删除。

“Spring中IOC详解”的评论:

还没有评论