七十、Spring之 IoC 控制反转

举报
托马斯-酷涛 发表于 2022/05/26 01:54:30 2022/05/26
【摘要】 IOC(Inversion of Control ):控制反转, 是一个理论,一个指导思想。 指导开发人员如何使用对象,管理对象的。 把对象的创建,属性赋值,对象的声明周期都交给代码之外的容器管理。 目录 理解IOC IOC的技术实现 Spring的配置文件 Spring容器创建对象的特点 使用IOC模拟用户注册操...

IOC(Inversion of Control )控制反转, 是一个理论,一个指导思想。 指导开发人员如何使用对象,管理对象的。 把对象的创建,属性赋值,对象的声明周期都交给代码之外的容器管理。

目录

理解IOC

IOC的技术实现

Spring的配置文件

Spring容器创建对象的特点

使用IOC模拟用户注册操作

IOC总结



理解IOC

  • 控制:  对象创建,属性赋值, 对象声明周期管理
  • 反转:把开发人员管理对象的权限转移给了代码之外的容器实现。 由容器完成对象的管理。
  • 正转:开发人员在代码中, 使用 new 构造方法创建对象。 开发人员掌握了对象的创建,属性赋值,对象从开始到销毁的全部过程。 开发人员有对 对象 全部控制。

 总结: 通过容器,可以使用容器中的对象(容器已经创建了对象, 对象属性赋值了, 对象也组装好了)。

             Spring就是一个容器,可以管理对象,创建对象,给属性赋值

IOC的技术实现

(依赖注入)DI(Dependency Injection ):缩写是DI ,是IoC的一种技术实现。 程序只需要提供要使用的对象的名称就可以了, 对象如何创建, 如何从容器中查找,获取都由容器内部自己实现。

  • 依赖:  比如说ClassA类使用了ClassB的属性或者方法,叫做ClassA依赖ClassB.

eg:


  
  1. public class ClassB{
  2. public void createOrder(){}
  3. }
  4. public class ClassA{
  5. //属性
  6. private ClassB b = new ClassB();
  7. public void buy(){
  8. b.createOrder();
  9. }
  10. }
  11. 执行ClassA的buy()
  12. ClassA a = new ClassA();
  13. a.buy();

        Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系, Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。使用 IoC 实现对象之间的解耦和。

Spring的配置文件


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

spring标准的配置文件:

  1. 根标签是 beans
  2. beans 后面的是约束文件说明
  3. beans里面是bean声明
  4. 什么是bean: bean就是java对象, spring容器管理的java对象,叫做bean

Spring容器创建对象的特点

  • 容器对象(ApplicationContext )接口        通过ApplicationContext对象,获取要使用的其它 java 对象, 执行 getBean(“<bean>的id”)
  • spring默认是调用类的无参数构造方法,创建对象
  • spring读取配置文件,一次创建好所有的java对象, 都放到map中

使用IOC模拟用户注册操作

需求:模拟用户注册

分析:

  • 需要定义一个dao接口(UserDao)接口中的方法 insertUser(SysUser user ) , 定义接口的实现类 MySqlUserDao  inserUser()方法里面不需要操作数据, 输出“使用了dao执行insert操作”。

  • 需要定义一个service接口(UserService),定义接口的实现类 UserServiceImpl. 在service的实现类有一个 UserDao类型的属性。 service类中有一个方法 addUser(SysUser user)。

  • 操作是 service类中的addUser() { userDao.insertUser() } 完成注册。

  • 定义一个实体类 SysUser, 表示用户的数据。

        spring管理多个配置文件: 常用的是包含关系的配置文件。 项目中有一个总的文件, 里面是有impor标签包含其他的多个配置文件。

语法:


  
  1. 总的文件(xml)
  2. <import resource="其他的文件的路径1"/>
  3. <import resource="其他的文件的路径2"/>
  4. 关键字“classpath:”:表示类路径, 也就是类文件(class文件)所在的目录。 spring到类路径中加载文件
  5. 什么时候使用classpath: 在一个文件中要使用其他的文件, 需要使用classpath


IOC总结

IOC:  管理对象的,把对象放在容器中,创建,赋值,管理依赖关系。

        通过管理对象,实现解耦合。 IoC解决处理业务逻辑对象之间的耦合关系, 也就是service和dao之间的解耦合。

spring作为容器适合管理什么对象 ?

  • service对象 ,dao对象。
  • 工具类对象。

不适合交给spring的对象 ?

  • 实体类。
  • servlet , listener ,filter等web中的对象。他们是tomcat创建和管理的。


文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。

原文链接:tuomasi.blog.csdn.net/article/details/123135171

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。