Spring中IOC的重点理解(笔记)

Spring: 出现在2002左右.解决企业级开发的难度.减轻对项目模块 类与类之间的管理帮助开发人员创建对象,管理对象之间的关系.

补充: 什么是OCP原则?(面试)

(1)是软件七大开发当中最基本的一个原则,开闭原则。

(2)什么是开(open)?对扩展开放

(3)什么是闭(close)?对修改关闭

* 是最基本的,最核心的,其他的六个原则为其服务

* OCP的开闭原则的最核心是什么?

只要你在扩展系统功能的时候,没有修改以前写好的代码,那么就是符合OCP原则(扩展力强,耦合度低)

反之,如果你在扩展系统功能的时候,修改了以前的代码,那么这个设计是失败的,不符合

当对系统功能进行扩展,如果修改了之前的代码,之前所有的程序都需要进行测试,这是我们不想看到的

案例:

表示层:

持久层:

业务层:

缺点:

我们现在就是controller->依赖service->依赖mapppr(上依赖下都违背了依赖倒置原则)。Controller具体依赖了UserServiceImpl实现类,而UserServiceImpl又具体依赖UserMapperIMpl ,下面只要一动就影响了上(等号后面是具体实现类)依赖倒置原则(开发原则)就是上不依赖下

正确的依赖:
*我们应该面向抽象编程,面向接口编程,不是面向具体编程(就是我们平常用的框架)(什么是依赖倒置原则?)
*应该是private Uservice userService;
*降低程序的耦合度,提升扩展力(目的)

**总结:**现在的项目违背了OCP原则以及DIP原则

解决:我们现在的用控制反转(IOC)来解决问题:(Inversion of controll)

特别重点:

控制反转是什么?

(一)是一种编程思想,新型的设计模型,由于出现比较新,没有被纳入GoF23种设计模型

(二)我不在程序中采用硬编码的方式来new对象(new 对象的权力交出去

(三)我不在程序中采用硬编码的方式来维护对象的关系了(对象之间的维护权我也交出去了

spring框架(面试):

*实现了控制反转Ioc思想

*可以帮你new对象(反转)

*可以帮你维护对象与对象之间的关系(反转)

*是一个实现Ioc思想的容器

*spring是一个容器,容纳这么多bean(凡是被spring创建出来的对象)的容器,更加易于管理

正转: 开发人员在代码中使用new创建对象,开发人员主动管理对象

反转:

控制反转的方式有很多种:

依赖注入(控制反转思想的实现方式)(DI) (两种具体的实现方式)依赖指的是A对象与B对象的关系,注入是一种手段,可以让A对象与B对象产生关系并且维护(让其符合OCP原则与DIP原则)

*set注入(执行set方法给属性赋值)

*构造方法注入 (执行构造方法给属性赋值)

*控制反转是思想,依赖注入是实现

IOC的技术实现:

DI 是 ioc 的技术实现.DI(Dependency Injection): 依赖注入,只需要在程序中提供要使用的对象名称就可以,至于对象如何创建 赋值 查找都是由容器内部实现

Spring是使用的DI实现了ioc的功能,spring底层创建对象,使用的是反射机制.

Spring是一个容器,创建对象,给对象赋值,底层是反射创建对象.

补充: ApplicationContext ac = new ClassPathXMLApplicaton("conf");这行代码是读取spring的配置文件,在读取spring的配置文件中一旦遇到<bean id="" class="">这个标签,就会根据反射机制来创建名字为id的这个class类的对象,并将对象存放在key=id,value=对象的map集合中.

在我们测试的时候,底层原理就是通过反射机制调用类的无参构造方法 (可以设置构造方法来测试,要保证它的存在)来实例对象getBean相当于map的key,可以通过id来从集合中获取这个spring容器为我们创建的对象了.

bean的Id写错那么不会报空,直接报错

// ApplicationContext的超级父接口beanFactory(能够生产bean对象的工厂,是IOC的顶级接口)
Spring底层实际是使用了工厂模式xml解析+工厂模式+反射机制 就可以实现IOC

相关推荐
葫芦和十三3 小时前
图解 MongoDB 21|选举与 failover:Primary 是怎么选出来的
后端·mongodb·agent
GetcharZp4 小时前
26k Star 开源内网穿透神器 NetBird,一分钟实现全球设备互联!
后端
考虑考虑4 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯5 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
lizhongxuan7 小时前
多Agent之间的区别
后端
青石路9 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
杨充10 小时前
1.面向对象设计思想
后端
IT_陈寒10 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
systemPro10 小时前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗11 小时前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端