Spring

Spring是一个轻量级的IOC和AOP框架,它管理bean的生命周期并实现控制反转。通过XML配置或注解方式实现依赖注入,如属性的set方法或构造器注入。Spring还提供了JDBC模板和事务管理功能,支持声明式事务,具有多种事务传播行为。AOP用于面向切面编程,常用于日志、事务等横切关注点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring

spring概述

spring是什么?

spring是一个轻量级的,非侵入式的,IOC和AOP的一站式框架,为简化企业级应用开发而生

轻量级:体积小,占用资源少

非侵入式:我们的业务代码中的类,不会继承实现spring框架中的类和接口

IOC:Inversion of Control 控制反转 以前程序中使用对象是程序员自己new

使用了spring以后,我们不需要new对象,由spring框架来管理生成对象

AOP:面向切面编程

一站式框架:它集项目整体管理,数据访问,web,测试等等于一体

在bean标签中配置需要spring框架管理的类,

把spring框架生成的对象称为一个bean对象,此对象与自己new对象是有区别的,

spring创建时,可以根据配置文件为生成的对象增强功能 IOC

使用spring框架来管理生成对象

使用spring框架中的一个实现类,读取spring配置文件,生成并管理这些对象

在程序中需要对象时,直接从spring框架中获取即可

spring搭建

1.导入spring核心功能

2.创建spring.xml配置文件

​ 配置哪些类需要spring来管理

3.使用ClassPathXmlApplicationContext来读取配置文件

4.获取spring创建生成的对象

IOC控制反转,把什么的控制权,反转给谁

​ 是一种编程架构思想,就是将原来程序中自己new对象的权利,反转给spring框架

实现:在是spring.xml文件中配置需要spring管理的类,

​ 解析xml 读取配置,使用bean工厂创建对象(用到反射机制),

​ 在spring中维护一个容器,将创建的对象管理起来, IOC容器在哪需要,在哪儿注入

控制反转:就是将在程序中创建对象的权利反转给spring框架,由spring统一管理

好处:解耦 功能增强

spring管理bean(2种)

1.在xml中配置

​ 依赖注入 id=“对象名” class=“类的地址” name=“也可以定义对象名”

​ scope=“指导spring框架如何生成对象”

​ singleton:默认值 单例的 在一个应用程序中,为一个类只创建一个对象

​ 对象在spring容器启动时创建

​ prototype:原型的 每次获取时,会创建一个新的对象

​ request:一次请求中创建一个

​ session: 一次会话中创建一个

​ application:一个应用程序中创建一个

在IOC的同时,会发生一个动作称为依赖注入,就是在spring创建对象的同时,为对象中注入值,注入值的方式有2种:

1.通过属性的set方法注入 2.通过构造方法注入(有弊端不建议使用)

2.使用注解方式最终使用的方式

​ 可以使用注解标签为属性注入值

@Autowired 属于spring框架提供的注入的注解标签,一般写在属性上面或者属性的set方法上面,可以通过类型注入,也可以通过对象名称注入

​ 不需要对象名,可以根据属性的类型,在spring容器中查找 byType

@Qualifier(value=“userDao”) 通过@Qualifier指定需要注入的对象名

默认情况下注入的属性名不能为空

@Resource 是jdk中提供的注解标签,既可以按类型注入,也可以按名称注入

​ @Resource @Resource (name=“userDao”)

后端=层架框

web层 servlet接收数据 <context:component-scan base-package=“com.ffyc.springpro”> </context:componet-scan>

service java处理逻辑部分

dao 数据访问

在service 调用dao

@Repository(value=“userDao”) 表示的是数据访问层

@Component(value=“user”)

@Scope(value=“singleton”) 单例

@Service (value = “user Service”)

Spring JDBC

1.spring是如何使用IOC管理其他bean,提供JDBC Template(了解即可)增删改查,mybatis

1.1 spring管理数据库连接对象 1.2 生成提供jdbcTemplate

​ 让spring管理阿里数据源对象 druid -德鲁伊

<context:property-placeholder location=“config.properties”/>

实现了数据库连接池功能,减少了频繁创建销毁数据库连接的开销

<bean id="dataSource class=“com.alibaba.druid.pool.DruidDataSource”>

······

springjdbc模块封装了 jdbcTemplace类,用于执行sql

AOP面向切面编程

​ 把业务之外的代码 事务提交

​ //获得sqlsession 横切

//获得接口代理 saveuser(){

​ 业务代码 }

//事务提交

//关闭sqlsession

AOP面向切面编程 ,使用预编译和动态代理的方式,使用程序可以统一维护的一种技术

作用:可以将业务逻辑之间进行隔离,降低耦合度,使得开发维护方便

​ OOP是程序各层之间的整体设计

​ AOP是针对业务逻辑处理过程中某个具体的步骤进行处理

AOP为程序带来什么好处?
可以将一些公共的,重复出现的非业务代码进行提取,然后用动态代理的方式,为业务代码横切添加额外提取的功能,而且不需要显示的在业务代码中调用,可以通过一个代理对象,来帮我们调用这些抽取出来的方法

​ 通过配置 告诉代理 在执行哪个方法时,帮助我们动态调用某个额外的方法

基本概念:

​ 连接点:类中可以被增强的方法 切入点:类中实际被增强的方法

通知:在连接点上要做的事情 切面:把通知添加到连接点的整个过程

目标:要增的方法所在的类 代理:(淡化框架的内部实现好了的)配置完成 后,为目标对象创建一个代理对象

​ 首先提取通知要增强的功能

​ 发现切入点

​ 配置

​ aop底层是java设计模式中的动态代理模式

​ AOP不是spring框架特有的技术,spring框架应用这一技术思想进行封装

​ spring中是集成Aspect J这样的一个AOP框架

2.spring数据访问模块的事务管理功能

spring事务管理

事务:属于数据库功能,事务可以看做是由对数据库若干操作组成的一个单元(一个整体)

​ 在业务代码执行时,有时一个业务操作需要向数据库发送多条sql,多条sql属于同一个业务的,要求是一个整体,要么都执行成功,要么都不成功

​ 举例:转账,网购

事务特性:原子性、隔离性、持久性、一致性

​ 数据库事务管理就是在你将这若干操作执行完成后,需要对事务进行提交,数据库对数据进行操作,最终达到持久

​ 数据库事务重要性,增删改操作必须在事务管理(没有问题提交,有问题不能提交)中进行

spring事务管理 spring代理我们的程序提交事务

​ spring中的事务管理有两种形式:

​ 1.编程式事务:需要在代码中显示的提交事务的 注入private TransactionTemplate;

​ 2.声明式事务:有两种实现方式: 1.在xml中配置 (需要大量的配置,为需要在事务管理中的方法增强功能) 2.注解方式实现 transactionTemplate;

怎么管理? 提供DataSourceTransaction Manager实现事务提交

管理实现原理 AOP 代理 静态代理 动态代理 jdk代理 反射 实现

​ cglib代理

@Transactional 注解标签可以作用在类和方法上

​ 作用在类上,表示此类中所有的方法都会添加事务增强功能

​ 作用在某个方法上,表示此方法添加事务增强功能

声明式事务失效场景:

1.同一个类中方法调用,导致声明式事务失效(在自己类中调用,就是普通方法调用,不会走代理的环绕通知)

2.将@Transactional应用在非public修饰的方法上

3.注解@Transactional用在的类非spring容器管理的bean

4.@Transactional注解事务传播行为设置错误

5.异常被catch捕获导致@Transactional失效

​ @Transactional (rollbackFor=RuntimeException) 默认出现运行时异常时不提交 可修改rollbackFor=Exception.class 对所有异常都不提交

6.数据库引擎不支持事务

Spring事务传播行为(7个)

​ 传播 至少是两个方法之间相互调用的

​ 事务传播行为是spring框架对事物的增强功能,与数据库无关

例如:A方法 调用 B方法 那么B应该如何执行? B方法是与A方法事务合二为一?还是自己是一个独立的?

1.@Transactional (propagation=Propagation.REQUIRED)

​ PROPAGATION-REQUIRED spring默认的传播行为

​ 指定方法必须在事务内执行,若当前存在事务,则加入当前事务,若不存在,就创建

​ 有事务的方法A 调用Propagation.REQUIRED的方法B 那么B方法事务就合并加入到A方法事务中

​ 没有事务的方法A -----------------------------------B 那么B方法事务就自己创建一个新的事务

2.@Transactional (propagation=Propagation.SUPPORTS)

有事务的方法A 调用propagation.SUPPORTS的方法B 那么B方法事务就合并并加入到A方法事务中

没有事务···························B 那么B方法就没有事务

3.··············(····················REQUIRED_NEW)

​ 有···A 调用······REQUIRED_NEW···B 那么就把A事务挂起,B方法自己创建一个新的事务

没有····A ·····························B 那么B方法就自己创建一个新的事务

IOC:spring来管理(整个对象的生命周期)程序中的对象,统一管理,需要时注入即可,降低耦合,对对象进行功能上的增强

AOP:将非业务代码抽取,使用代理对象,在业务代码运行时,额外调用其他公共非业务代码,增强功能,降低耦合

spring数据访问:重点spring对事务管理

实现方式 编程式事务

​ 声明式事务

​ 配置事务管理实现类(spring提供)

​ 开启注解事务

底层实现,使用AOP环绕通知

方法执行前建立数据库,开启一个事务

方法执行成功,提交事务

出现异常,事务回滚

ssm搭建:
1.导入jar

2.spring配置

3.mybatis接口,映射文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JIANG++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值