spring学习笔记-核心思想、Spring IOC

spring笔记-核心思想、Spring IOC

核心思想

IOC

  • IOC 控制反转,是一个技术思想,不是技术实现;

    Java开发领域对象的创建、管理问题

    不用自己去new对象,用IoC容器帮助我们实例化对象并管理它,需要使用到哪个对象,去找IoC容器即可

    控制:对象创建/实例化的权力

    反转:控制权交给外部环境(Spring框架、IoC容器)
    在这里插入图片描述

  • IoC解决了对象之间的耦合问题

在这里插入图片描述

  • IoC和DI的区别

DI:依赖注入

Ioc和DI描述的是一件事:对象实例化及依赖维护,角度不同

IoC站在对象的角度,对象实例化及其管理的权力反转交给了容器

DI是站在容器角度,容器会把对象依赖的其他对象注入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WSauAfSv-1617285741138)(C:\Users\wadye\AppData\Roaming\Typora\typora-user-images\image-20210401214758273.png)]

AOP

  • AOP:面向切面编程/面向方面编程

    AOP是OOP的延续

    OOP三大特征:封装、继承、多态

    OOP是一种垂直继承体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rqfV0nQ9-1617285741138)(C:\Users\wadye\AppData\Roaming\Typora\typora-user-images\image-20210401214855949.png)]

​ OOP处理不了多个方法中相同位置出现的重复代码

​ 横切逻辑代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XWPOcE9-1617285741140)(C:\Users\wadye\AppData\Roaming\Typora\typora-user-images\image-20210401214905938.png)]

​ 存在的问题:

​ 1、横切代码重复

​ 2、横切逻辑代码和业务逻辑代码混在一起,代码臃肿,维护不方便

​ AOP提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X83s7miq-1617285741140)(C:\Users\wadye\AppData\Roaming\Typora\typora-user-images\image-20210401214926804.png)]

​ 横切逻辑代码如何在不改变原有业务逻辑的情况下,应用到原有业务逻辑中

  • AOP解决什么问题

    在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,必变横切逻辑代码重复

  • 为什么叫面向切面编程

    切面:横切逻辑,原有业务逻辑代码不能懂,只能操作横切逻辑代码,影响多个方法

Spring IOC

1、beans.xml:定义需要实例化对象的类的全限定类名以及类之间依赖关系描述

2、BeanFactory(IoC容器)通过反射来实例化对象并维护对象之间的依赖关系

Spring IOC 实现

1、纯xml(bean信息定义全部配置在xml中)

2、Xml+注解

3、纯注解模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gmkjSquA-1617285741140)(C:\Users\wadye\AppData\Roaming\Typora\typora-user-images\image-20210401215257405.png)]

BeanFactory 和 ApplicationContext的区别

BeanFactory是Spring框架中IoC容器的顶层接口,它只用来定义一些基础功能和规范

AoolicationContext是它的一个子接口,具备BeanFactory提供的全部功能

通常我们称BeanFactory为SpringIoC的基础容器,ApplicationContext是容器的额高级接口,比BeanFactory拥有更多的功能,比如国际化支持和资源访问等

Bean实例化的三种方式

1、使用无参构造器(推荐)

为了自己new的对象加入到SpringIoc容器管理中

2、静态方法

<bean id="" class="" factrory-method=""/>

3、实例化方法

<bean id="" class="" />
<bean id”” factory-bean=”” factory-method=””>

Bean的作用范围以及生命周期

作用范围:scop

  • singleton 单例,容器中只有该对象

  • Prototype 原型(多例模式),每次使用都返回新的对象,只创建对象,不管理对象Reuqest session application websocket web应用中可能会用到

生命周期

  • 单例模式:singleton

    • 对象出生:当创建容器时,对象创建

    • 对象活着:只要容器在,对象一直活着

    • 对象死亡:当销毁容器时,对象被销毁

总结:单例模式的bean对象生命周期与容器相同

  • 多例模式:Prototype

    • 对象出生:当使用对象时,对象创建

    • 对象活着:只要对象在使用中,对象一直活着

    • 对象死亡:当对象长时间不用时,被java的垃圾回收器回收

总结:多例模式的bean对象,spring框架只负责创建,不负责销毁

注解

@Autowired 按照类型注入,如果按照类型无法唯一锁定对象,可以结合@Qualifier指定具体id

@Congigruation 当前类是一个配置类

@CompoentScan 注解扫描路径

@PropertySource 引入外部资源文件

@Bean该方法返回值注入IoC容器

@Value 资源文件里的值

@Import 引入其它配置类

@Lazy 配置延迟加载

文章内容输出来源:拉勾教育Java高薪训练营;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值