type
status
date
slug
summary
tags
category
icon
password
一、框架概述
- 轻量级
- 解决企业应用开发的复杂性
- 两个核心: IOC 和 AOP
- IOC: 控制反转->把创建的对象交给spring bean统一管理
- AOP: 面相切面,不需要修改源代码进行功能增强
- 特点:
- 方便解耦,简化开发
- Aop 编程支持.方便程序测试。
- 方便和其他框架进行整合
- 方便进行事务操作。
- 降低 API开发难度
二、IOC容器
实践
- 下载 spring.io

- 下载
进入官网的github页面

点击如上如所示:

在到此位置, 位置错误
通过maven加载jar包,6.xxx版本需要java 11及以后
User.java
bean.xml

IOC 底层逻辑
- IOC
控制反转,把对象创建和对象之间的调用过程,交给Spring 进行管理
使用 IOC 目的:为了耦合度降低。
做入门案例就是 IOC实现
- IOC 底层原理
xml 解析 、工厂模式、反射
- 图解

IOC接口
1、IOC思想基于 IC容器完成,IOC容器底层就是对象工厂
2、Spring 提供 IOC容器实现两种方式:(两个接口)
(1)BeanFactory:I0C容器基本实现,是Spring 内部的使用接口,不提供开发人员进行使用.加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext: BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。加载配置文件时候就会把在配置文件对象进行创建
3、ApplicationContext接口实现类


IOC操作bean管理
- 基于xml创建对象
(1)在 spring配置文件中,使用 beān 标签,标签里面添加对应属性,就可以实现对象创建ml
(2)在 bean 标签有很多属性,介绍常用的属性。id 属性:唯一标识。class 属性:类全路径(包类路径)|
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
- 基于xml方式注入属性
DI: 依赖注入,就是注入属性
- 第一种注入方式:使用set方法进行注入
(1)创建类,定义属性和对应的set方法
(2)构造方法
(3) p标签使用
在标签<beans 中添加p的xmlns
(4)注入其他类型的属性
- 字面量
null 值
<property name="address">
<null/>
</property>
- 属性值包含特殊符号
1️⃣ 通过转义的方式 eg: $lt; $gt
2️⃣ 特殊字符内容写到CDATA
</property>
- 外部bean 输入
- 内部注入
- 级联控制
第一种写法
第二种写法
- 注入集合
- Spring 有两种bean;一种是普通bean,另一种是factory bean
- 普通bean 配置文件的类型就是返回的类型
- 工厂bean 配置文件定义bean类型可以和返回值不一样
- 在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例,
- scope 默认属性值
- 区别:
- singleton 加载spring配置文件时候就会创建单实例对象;prototype在调用getBean方法时候创建多实例对象
- singleton 单实例; prototype 多实例
- request ,session等参数
- 生命周期: 对象创建到销毁的过程
- 过程
- 通过构造器创建bean实例(无参构造)
- 为bean的属性设置值和对其他bean的引用(调用set方法)
- 初始化之前执行
- 调用bean的初始化方法(需要进行配置初始化方法)
- 初始化后执行
- bean可以使用(获取到对象了)
- 容器关闭的时候,调用bean的销毁方法(需要进行配置销毁方法)
- xml自动装配
- 外部属性文件
- 基于注解
- 什么是注解。 注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值.
- spring针对Bean管理中创建对象提供注解
- @Component
- @Service
- @Controller
- @repository
- 基于注解方式创建对象
- 基于注解属性注入
- 完全基于注解开发(Spring boot 的模式))
5.1 数组
5.2 List
5.3 Map
5.4 集合里面设置对象类型值
5.5 创建对个对象
5.6 把集合注入部分提取出来
FactoryBean
第一步:创建类,让这个类作为工厂bean,实现 factory bean
第二步:实现接口里面的方法,实现的方法中的定义返回bean类型
bean的作用域
第一个值:singleton 单实例(默认值)
第二个值:prototype 多实例
bean的生命周期
1、什么是自动装配
根据指定装配规则(属性名称或者属性类型)Spring 自动将匹配的属性值进行注入
2.过程
实现自动装配
bean 标签属性autowike,配置自动装配autowire 属性常用两个值:byName,根据属性名称注入,注入值 bean 的id 值和类属性名称一样byType,根据属性类型注入
使用注解,注解作用在类上面,方法上面,属性上面:
使用注解目的:简化 xml配置
以上注解功能都是一样的,都可以用来创建实力
引入组件依赖
需要 aop相关依赖包 context包包含了aop,如果没有再引入
bean配置
开启配置细节
@Autoware:根据属性类型进行自动装配
自动装配
@Qualifier: 根据属性名称进行注入
@Resource: 可以根据类型注入,可以根据名称注入
@Value: 值
三、AOP
1. aop原理
(1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能
(3)使用登录例子说明 AOP

- 底层原理
- 使用动态代理
- aop术语:
- 准备工作3.3、项目工程中引入AOP相关依
(1)有接口情况,使用JDK动态代理

(2)无接口,只用CGLIB动态代理

1、连接点 类里面哪些方法可以被增强,这些方法称为连接点
2、切入点 实际被真正增强的方法,称为切入点
3、通知(增强)
(1)实际增强的逻辑部分称为通知(增强)
(2)通知有多钟类型
*前置通知
*后置通知
*环绕通知
*异常通知
*最终通知finally
4、切面 是动作
(1)把通知应用到切入点过程
3.1、Spring 框架一般都是基于 Aspect] 实现 AOP 操作:
(1)Aspect] 不是 Spring 组成部分,独立 AOP 框架,一般把 Aspect] 和 Spimg,框架一起使用,进行 AOP 操作。
3.2、基于 Aspect] 实现 AOP 操作、
(1)基于 xml 配置文件实现
i、创建类:
ii、创建增强类;编写增强逻辑
在增强类里面,创建方法,让不同方法代表不同通知类型
iii、进行通知配置
(1)在spring配置文件中,开启注解扫描
(2)使用住在创建user 和 userAop 对象
(3)在增强类上面添加注解@Aspect
(4) 在spring配置文件中开启生成代理对象
(2)基于注解方式实现(使用)
3.3


3.4、切入点表达式
(1)写入点表达式作用:知道对那个类里面的方法进行增强
(2)语法结构
4.配置开启注解扫描
犯错误:
https://www.springframework.org/schema/ context /spring-aop.xsd">
注解增强:
- JdbcTemplate
3.1 准备工作
3.2 创建对应的框架
3.3 别忘记对应的包文件
- propagation: 事务传播行为 (1)多事务方法直接进行调用,这个过程中事务 是如何进行管理的,


- 事务操作

- 开启事务配置
在service包下使用注解
@Transactional
- ioslation:事务隔离级别、 (1)事务有特性成为隔离性,多事务操作之间不会产生影响。不考虑隔离性产生很多问题
(2)有三个读问题:脏读、不可重复读、虚(幻)读,
(3)脏读:一个未提交事务读取到另一个未提交事务的数据

(4)不可重复读:一个未提交事务读取到另一提交事务修改数据

(5)虚读:一个未提交事务读取到另一提交事务添加数据
(6)解决:通过设置事务隔离性,解决读问题

(7)timeout: 超时时间。
(1)事务需要在一定时间内进行提交,如果不提交进行回滚、
(2)默认值是-1,设置时间以秒单位进行计算。
(8) readOnly:是否只读
(1) 读:查询操作,写:添加修改删除操作,
(2) readOnly 默认值 false,表示可以查询,可以添加修改删除操作。
(3) 设置 readOnly,值是 true,设置成 true 之后,只能查询,
(8) rollbackFor:回滚
设置出现哪些异常进行事务回滚、
(9) noRollbackFor:不回滚
设置出现哪些异常不进行事务回滚,
- XML配置管理设置
- 完全开启注解
- Author:atsuc
- URL:https://blog.atsuc.cn/article/java-springboot-000
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!