Spring 框架概述
核心部分:IOC和AOP
(1)IOC:控制反转,把创建对象的过程交给Spring进行管理
(2)Aop:面向切面,不修改源代码进行功能增强
核心框架
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RR3jzUSP-1636784134412)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108145137670.png)]
一个简单的例子
步骤:
1.上spring官网下载最新稳定版本的最新的spring包
2.项目中导入五个核心jar包
3.创建普通类
4.创建普通类,在这个类中创建普通方法
5.创建spring配置文件,在配置文件中配置创建的对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pBQUQxKd-1636784134415)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108151624932.png)]
6.测试代码编写
IOCBean管理xml方式
(1)IOC
1.什么是ioc
中文是控制反转,把对象的创建和对象之间的调用过程都交给Spring进行管理
2.使用目的:为了降低耦合度
3.入门案例就是ioc的实现
(2)IOC底层原理
1.xml1解析、工厂模式、反射
原始的方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTL93xB3-1636784134416)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108155443367.png)]
工厂模式->IOC
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmOWIoAx-1636784134417)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108155946511.png)]
最终的目的:耦合度降低到最低的情况
IOC过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBiJ5jLh-1636784134418)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108160604215.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4KYSykm-1636784134419)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108165603701.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KIyvyp4s-1636784134419)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108170937350.png)]
IOC操作 Bean管理
(1)spring创建对象
(2)spring创建注入
bean创建对象方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yj2hGWan-1636784134420)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108201131194.png)]
-
使用bean标签,标签里添加对应属性,就可以实现对象创建
-
bean中常用属性
- id 属性 唯一标志
- class属性 类全路径(包+类名字)
- name属性
-
创建对象前。默认也是创建无参构造函数
基于xml方式注入属性
-
DI:依赖注入,就是注入属性
(1)使用set方法进行属性注入
先定义完成set方法的创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N7nKKzPk-1636784134421)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108203840835.png)]
xml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2OVmuYFI-1636784134421)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108203709463.png)]
(2)使用有参构造进行注入属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E304Uw9H-1636784134421)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211108204748418.png)]
注入属性-外部bean
(1)创建两个类service类和dao类
(2)在service类中调用dao里面的方法
(3)在spring配置文件中配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-euv1nXnJ-1636784134422)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110111402528.png)]
用配置文件完成代码工作
注入内部bean和和级联赋值
1.内部bean
(1)一对多的关系:部门和员工
(2)在实体类之间表示一对多的关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dJ2R7ktl-1636784134422)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110113048464.png)]
2.级联赋值(有点类似于外部注入)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQfLNAtr-1636784134423)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110132825948.png)]
xml注入集合属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdl6dJgp-1636784134423)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110135949921.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dC5C1FvU-1636784134424)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110140002591.png)]
注入的属性是对象的情况:类似于外部注入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S9qtRPKB-1636784134425)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110141925334.png)]
FactoryBean
Spring 有两种类型的bean,一种叫做bean,另外一种叫做工厂bean(FactoryBean)
普通bean:在配置文件中定义bean类型就是返回类型
工厂bean:在配置文件中定义bean类型可以和返回类型不一样
例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-toaXoVpk-1636784134425)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110150233575.png)]
类型是myBean,但是返回的类型是Course,可以在接口方法getObject()中定义具体返回的类型
bean的作用域
1.在Spring里面,设置创建bean实例是单实例还是多实例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4NexRsn-1636784134425)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110152437545.png)]
通过"scope"来控制多实例还是单实例
2.在Spring里面,默认情况下,bean是单实例对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6repgCcS-1636784134426)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110152731589.png)]
bean生命周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzWqz5Jg-1636784134426)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211110153211156.png)]
xml自动装配
自动装配含义:根据指定装配规则(属性名或者属性类型),Spring自动将匹配的属性值
IOC容器Bean管理注解
简化xml
spring针对bean管理中创建对象提供注解
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
基于注解方式实现对象创建
第二步 开启组件扫描
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7aJ70UD-1636784134427)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111142132668.png)]
第三步 创建类 在类上面添加创建对象注解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ahEFt1FG-1636784134427)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111140902779.png)]
第四步 开启组件扫描细节配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGJfuSv3-1636784134427)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111142645722.png)]
use-default-filter="false"表示不是包下面所有的类都扫描一遍而是根据下面的配置进行扫描,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TasvFmzL-1636784134428)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111143022570.png)]
表示不去扫描哪些内容
基于注解进行属性注入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9r5pCGv1-1636784134428)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111143325272.png)]
Qualifier
纯注解开发
(1)创建配置类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmSJ3r9k-1636784134429)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111151106479.png)]
AOP
面向切面编程
例子解释:降低功能的耦合度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8byp2Ta-1636784134429)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111152831093.png)]
不通过修改源代码的方式,在主干功能里面添加新功能
底层原理
(1)有接口的情况 使用JDK动态代理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BrgIDIqx-1636784134429)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111153341077.png)]
(2)没有接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oye4fTVD-1636784134430)(C:\Users\HJY\AppData\Roaming\Typora\typora-user-images\image-20211111153629039.png)]
JDK动态代理代码
AOP
面向切面编程
例子解释:降低功能的耦合度
[外链图片转存中…(img-h8byp2Ta-1636784134429)]
不通过修改源代码的方式,在主干功能里面添加新功能
底层原理
(1)有接口的情况 使用JDK动态代理
[外链图片转存中…(img-BrgIDIqx-1636784134429)]
(2)没有接口
[外链图片转存中…(img-Oye4fTVD-1636784134430)]