Spring
2021-07-05 22:37:13 6 举报
AI智能生成
本人对Spring的理解
作者其他创作
大纲/内容
常见异常与解决
切点表达式错误
分析:该异常主要看caused by后面第一句提示信息:PointcutExpression,意思是切点表达式语法错误,找到配置文件中的切点表达式
其中蓝色框标记表达式只定位到了包中所有的类,并未指定类中的方法,所以需要修改:或指定包下某个具体的方法。<br>
图形结构
图形结构解析
简介
Spring是一款应用于业务逻辑层的轻量级开源框架,<br>主要解决业务逻辑层和其它各层的松耦合问题。<br>
IOC和DI
IOC
IOC:控制反转,它是一种设计思想,将原本在程序中<br>手动创建对象的控制权,交由Spring框架来管理。<br>
DI
DI:依赖注入,在程序运行时,动态的向某个对象提供所需的对象。<br>它能让我们更好理解IOC,让程序依赖于Spring容器。【方便我们更好的理解IOC】<br>
案例【用程序解刨IOC和DI】
总结
Bean
简介
被Spring 容器管理的Java对象
作用域
在 Spring 里面,可以设置创建 bean 实例<br>是单实例还是多实例对象,默认为单实例对象<br>
生命周期
从对象创建到销毁的过程<br>
自动装配
根据指定装配规则(属性名称或者属性类型),<br>Spring 自动将匹配的属性值进行注入<br>
AOP
简介
面向切面编程,是一种新的程序设计思想,<br>对传统OOP的补充。<br>面向对象 纵向继承机制<br>面向切面 横向抽取机制<br>
AOP术语<br>
通知(Advice)
实际增强的逻辑部分就是通知,通知分为<br>前置通知,后置通知,返回通知,异常通知,环绕通知<br>【就是你想要的功能,也就是上说的安全、事物、日子等。<br>你给先定义好,然后再想用的地方用一下。】<br>
切入点(Pointcut)
实际被增强的方法,在连接点的基础上,来定义切入点。<br>【假如你的一个类里,有十多个方法,那就有十几个连接点了对吧,<br>但是你并不想在所有方法附件都使用通知(也叫织入),<br>你只是想让其中几个,在调用这几个方法之前、之后或者抛出异常时干点什么,<br>那么就用切入点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。】<br>
连接点(Joinpoint)<br>
类中哪些方法需要被增强,这些方法就叫做连接点<br>【就是spring允许你是通知的地方】<br>
切面(Aspect)<br>
把通知应用到切点的过程
注
连接点就是为了让你好理解切点搞出来的,明白概念就行了。 <br>通知说明了干什么和什么时候干什么。 <br> 切入点说明了在哪干(指定到底是哪个方法)。<br>
AOP意义
不修改目标对象的源代码情况下实现对目标对象相关方法的增强
代理
静态代理
案例
概述
与静态代理不同,动态代理就是说 AOP 框架不会去修改编译时生成的字节码,<br>而是在运 行时在内存中生成一个 AOP 代理对象,<br>这个 AOP 对象包含了目标对象的全部方法,<br>并且在 特定的切点做了增强处理,并回调原对象的方法。<br>
概述
动态代理的代理类是动态生成的 . 静态代理的代理类是我们提前写好的
动态代理
概述
AOP 框架会在编译阶段生成 AOP 代理类,因此也称为编译时增强。
分类
基于接口动态代理
JDK动态代理
概述
JDK动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),<br>类Proxy和接口InvocationHandler是我们实现动态代理的核心;<br>
案例
基于类的动态代理
CGLIB动态代理
概述<br>
CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,<br>并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。<br>但因为采用的是继承,所以不能对final修饰的类进行代理。<br>
案例
AOP 操作-前置工作
Spring基于 AspectJ 实现 AOP 操作
概述
AspectJ 不是 Spring 组成部分,而是一个独立 AOP 框架,<br>一般把 AspectJ 和 Spirng 框架结合在一起使用,进行 AOP 操作。<br>
(1)基于 xml 配置<br>
案例
AspectJ案例
(2)基于注解方式
案例
切入点表达式
语法结构
execution([权限修饰符] [返回类型] [类全路径] [方法名称]([参数列表]) )
JdbcTemplate
概述
为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,<br>以此建立一个JDBC存取(CRUD)框架。<br>可以将Spring的JdbcTemplate看作是一个小型的轻量级持久化层框架。<br>
jdbc.properties配置文件
引入外部配置文件,<br>创建数据源bean<br>
创建JdbcTemplate 对象bean
增删改查
1)增删改<br>
2)批量增删改
3)查询单行多列
(如果没有数据会直接抛出异常,需要引用try进行相关的处理)<br>JdbcTemplate.queryForObject(String, RowMapper<Department>, Object...)<br>
4)查询单一值(一行一列)<br>
5)查询多行
事务
概述
1)在JavaEE企业级开发的应用领域,为了保证数据的完整性和一致性,<br>必须引入数据库事务的概念,所以事务管理是企业级应用程序开发中<br>必不可少的技术。<br>
2)事务就是一组由于逻辑上紧密关联而合并成一个整体<br>(工作单元)的多个数据库操作,这些操作要么都执行,要么都不执行。<br>
3)事务的四个关键属性(ACID)<br>
①原子性(atomicity)
“原子”的本意是“不可再分”,事务的原子性表现为一个事务中<br>涉及到的多个操作在逻辑上缺一不可。事务的原子性要求事务中<br>的所有操作要么都执行,要么都不执行。<br>
②一致性(consistency)
“一致”指的是数据的一致,具体是指:所有数据都处于满足业务规则的一致性状态。<br>一致性原则要求:一个事务中不管涉及到多少个操作,都必须保证事务执行之前数据<br>是正确的,事务执行之后数据仍然是正确的。如果一个事务在执行的过程中,<br>其中某一个或某几个操作失败了,则必须将其他所有操作撤销,<br>将数据恢复到事务执行之前的状态,这就是回滚。<br>
③隔离性(isolation)
在应用程序实际运行过程中,事务往往是并发执行的,<br>所以很有可能有许多事务同时处理相同的数据,<br>因此每个事务都应该与其他事务隔离开来,防止数据损坏。<br>隔离性原则要求多个事务在并发执行过程中不会互相干扰。<br>
④持久性(durability)
持久性原则要求事务执行完成后,对数据的修改永久的保存下来,<br>不会因各种系统错误或其他意外情况而受到影响。通常情况下,<br>事务对数据的修改应该被写入到持久化存储器中。<br>
事务前置案例
事务分类
编程式事务管理
概述
需要将事务管理代码嵌入到业务方法中来控制事务的提交和回滚。<br>在使用编程的方式管理事务时,必须在每个事务操作中包含额外的事务管理代码。<br>相对于核心业务而言,事务管理的代码显然属于非核心业务,<br>如果多个模块都使用同样模式的代码进行事务管理,显然会造成较大程度的代码冗余。<br>
声明式事务管理
概述
将事务管理代码从业务方法中分离出来(AOP),以声明的方式来实现事务管理。<br>事务管理代码的固定模式作为一种横切关注点,可以通过AOP方法模块化,<br>进而借助Spring AOP框架实现声明式事务管理。<br>
(1)基于注解方式
(2)基于 xml 配置文件方式
扩展
Spring在不同的事务管理API之上定义了一个抽象层,通过配置的方式使其生效,<br>从而让应用程序开发人员不必了解事务管理API的底层实现细节,<br>就可以使用Spring的事务管理机制。Spring既支持编程式事务管理,<br>也支持声明式的事务管理。<br>
事务管理器
概述
Spring从不同的事务管理API中抽象出了一整套事务管理机制,<br>让事务管理代码从特定的事务技术中独立出来。<br>开发人员通过配置的方式进行事务管理,而不必了解其底层是如何实现的。<br>
扩展
Spring并不直接管理事务,而是提供了多种事务管理器,<br>他们将事务管理的职责委托给Hibernate或者JTA等持久化机制<br>所提供的相关平台框架的事务来实现。<br>
注解声明式事务管理
案例
1)propagation:事务传播行为 <br>
概述
当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。
属性
2)ioslation:事务隔离级别
概述
数据库事务并发问题
1)脏读<br>
案例
2)不可重复读
案例
3)幻读
案例<br>
4)读未提交:READ UNCOMMITTED
5)读已提交:READ COMMITTED
6)可重复读:REPEATABLE READ
7)串行化:SERIALIZABLE
8)各个隔离级别解决并发问题的能力
9)各种数据库产品对事务隔离级别的支持程度
3)timeout:超时时间
(1)事务需要在一定时间内进行提交,如果不提交进行回滚<br>
(2)默认值是 -1 ,设置时间以秒单位进行计算
4)readOnly:是否只读
(1)读:查询操作,写:添加修改删除操作
(2)readOnly 默认值 false,表示可以查询,可以添加修改删除操作
(3)设置 readOnly 值是 true,设置成 true 之后,只能查询
5)rollbackFor:回滚
(1)设置出现哪些异常进行事务回滚 <br>需在事务注解标记的业务方法内部throw异常,才会触发事务回滚;如:<br>throw new ArithmeticException();
6)noRollbackFor:不回滚
(1)设置出现哪些异常不进行事务回滚
XML 声明式事务管理
完全注解声明式事务管理
0 条评论
下一页