spring框架(IOC+AOP)

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)]

  1. 使用bean标签,标签里添加对应属性,就可以实现对象创建

  2. bean中常用属性

    • id 属性 唯一标志
    • class属性 类全路径(包+类名字)
    • name属性
  3. 创建对象前。默认也是创建无参构造函数

基于xml方式注入属性

  1. 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)]

JDK动态代理代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值