spring 学习笔记

Spring 简介

Spring它是一个一站式的分层轻量级框架。Spring像是一个容器通过 依赖注入 和控制反转 来管理Springmvc Mybaties Struts和Hibernate等其他框架。

Spring框架优点

方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

IOC和DI

IOC  inversion of Controller 控制反转。
在程序中所说的IOC其实简单说,就是原来由我们自己实例化的对象交给spring容器来实始化。这时对象的实始化的权利就会反转。
DI:dependency injection 依赖注入
在spring框架负责创建Bean对象时,动态将依赖对象注入到Bean组件。
DI 依赖注入 在spring创建对象的过程中,对象所依赖的属性通过配置注入对象中。

也就是以前我们需要 new 对象 现在Spring帮我们来创建对象

Bean的实例化方式

无参数构造
对于这种方式,注意Bean类中必须提供无参数构造。

静态工厂方法
需要创建一个工厂类,在工厂类中提供一个static返回bean对象的方法就可以。

实例工厂方法
需要创建一个工厂类,在工厂类中提供一个非static的创建bean对象的方法,在配置文件中需要将工厂配置,还需要配置bean

Bean的作用域

在bean声明时它有一个scope属性,它是用于描述bean的作用域。
可取值有:
singleton:单例 代表在spring ioc容器中只有一个Bean实例 (默认的scope)
prototype多例 每一次从spring容器中获取时,都会返回一个新的实例
request 用在web开发中,将bean对象request.setAttribute()存储到request域中
session 用在web开发中,将bean对象session.setAttribute()存储到session域中

属性依赖注入

1.简单的属性注入
当对象创建时name的属性值就变成张三

2.复杂的属性注入
在注入对象的代码块中可以直接用userDao避免多次new对象在这里插入图片描述

@Autowired @Qualifier

@Autowired(required = false)当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错。@Autowired @Qualifier(“office”) private Office office; //xml配置文件中存在office和office2两个Bean在 Spring 容器中配置了两个类型为 Office 类型的 Bean,当对 Boss 的 office 成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个 Bean,因此异常发生了。 Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了。@Qualifier(“office”) 中的 office 是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统一成一个注释类。@Autowired是根据类型注入,@Qualifier是根据名称注入以上说的Bean 的名称是指bean中的id

原文:https://blog.csdn.net/u010002184/article/details/79354203

Spring AOP

AOP概述
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点,spring2.0之后整合AspectJ第三方AOP技术。
AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

主要功能
日志记录,性能统计,安全控制,事务处理,异常处理等等
主要意图
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

AOP与OOP区别
OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。
换而言之,OOD/OOP面向名词领域,AOP面向动词领域。

AOP底层实现

AOP分为静态AOP和动态AOP。静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。动态AOP是指将切面代码进行动态织入实现的AOP。Spring的AOP为动态AOP,实现的技术为: JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术)
在传统的spring aop开发中它支持增强(advice)有五种:
1.前置通知 目标方法执行前增强 org.springframework.aop.MethodBeforeAdvice
2.后置通知 目标方法执行后增强 org.springframework.aop.AfterReturningAdvice
3.环绕通知 目标方法执行前后进行增强 org.aopalliance.intercept.MethodInterceptor
4.异常抛出通知 目标方法抛出异常后的增强 org.springframework.aop.ThrowsAdvice
5.引介通知 在目标类中添加一些新的方法或属性(不讲解)
org.springframework.aop.IntroductionInterceptor

基于XML配置方案实现AOP

第一步 :创建目标
目标就是 mvc三层架构中的 service层
第二步:创建通知
在aspectj中它的增强可以不实现任何接口,只需要定义出增强功能(方法)
第三步:在spring的xml 配置文件中来配置
aop:config下的aop:aspect是aspectJ框架用来声明切面的。
在这里插入图片描述
前置通知
在这里插入图片描述
后置通知
在这里插入图片描述
环绕通知
在这里插入图片描述

异常抛出
在这里插入图片描述
注意:目标行为只有抛出了异常后才会执行这个增强方法

最终通知
在这里插入图片描述
无论是否有异常,最终通知都会执行.

注意在通知(增强类)中的增强方法方法名要和配置中 《aop》 的method方法一致

Spring事务管理机制

Spring事务管理的四个优点:
1.提供一致的对于不同的事务管理的API
2.支持声明式事务管理(重点)
3.编程事务管理(在开发中应用比较少)
4.优秀的整合与Spring的数据访问
我们重点讲解spring的事务管理的相关的API,还有声明式事务管理
Spring事务管理主要提供了三个接口来完成
1.org.springframework.transaction.PlatformTransactionManager
这是一个事务管理器,可以来选择相关的平台(jdbc hibernate jpa…)
2.TransactionDefinition
它定义事务的一些相关信息 例如 隔离 传播 超时 只读
3.TransactionStatus
它主要描述事务具体的运行状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值