《精通Spring 4.x 企业应用开发实战》学习笔记

第四章 IoC容器

4.1 IoC概述

  IoC(Inverse of Control 控制反转),控制是指接口实现类的选择控制权,反转是指这种选择控制权从调用类转移到外部第三方类或容器的手中。

  也就是由Spring容器借由Bean配置来进行控制。

  DI(Dependency Injection 依赖注入):让调用类的某一接口实现类的依赖关系由第三方容器注入,以移除调用类对某一接口实现类的依赖。

  由于IoC的概念不太好理解,所以用DI这个概念来代替IoC。

 

第三方容器:

  它帮助完成类的初始化和装配工作,让开发者从这些底层实现类的实例化、依赖关系装配等工作中解脱出来,专注于更有意义的业务逻辑开发工作。

  Spring容器通过配置文件或注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入工作。

 

4.4 BeanFactory和ApplicationContext

 

 

第五章 在IoC容器中装配Bean

  在实际应用中,大部分Bean都能以单实例的方式运行,所以Spring将Bean的默认作用域定位singleton。

  默认下,ApplicationContext容器在启动时,自动实例化所有singleton的Bean并缓存于容器中。

  采用scope=“prototype”指定非单例作用域的Bean。

 

使用注解定义Bean:

 

 

自动装配Bean:

  @AutoWired默认按类型匹配的方式在容器中查找匹配的Bean。

  如果希望Spring即使找不到匹配的Bean完成注入也不要抛出异常,那么可以使用@AutoWired(required=false)进行标注。

  如果容器中有一个以上匹配的Bean时,则可通过@Qualifier注解限定Bean的名称。如:@Qualifier("baseDao")。

  虽然Spring支持在属性和方法上标注@AutoWired,但实际开发中建议在方法上标注@AutoWired,因为这样更加面向对象,也方便单元测试的编写。

 

延迟依赖注入:

  Spring4.0支持,在Bean上标注@Lazy@AutoWired,不会立即注入属性,而是延迟到调用此属性时才注入属性。

 

 

对标准注解的支持:

  @Resource和@Inject这两个注解和@AutoWire类似。

  @Resource默认按名称匹配注入Bean,要求提供一个Bean名称的属性,如果属性为空,则自动采用标注处的变量名或方法名作为Bean的名称。

  @Inject和@AutoWire同样也是按类型匹配注入Bean的,只不过没有required属性。

 

Bean的作用范围:

 

 

第七章 Spring AOP基础

 

 

 

  AOP(Aspect Oriented Programing 面向切面编程)

  无法通过抽象父类的方法消除重复的横切代码,因为横切逻辑依附在业务类方法的流程中,不能转移到其他地方去。

  AOP将这些分散在各个业务逻辑代码中的相同代码通过横向切割的方式抽取到一个独立的模块中。

 

  当某个方法需要进行性能监测时,要在业务代码的前后加上开启/关闭性能监测的代码。这些非业务逻辑代码破坏了业务逻辑的纯粹性。

  我们希望通过代理的方式将性能监测的横切代码从业务类中完全移除,并通过动态代理技术将横切代码动态织入目标方法的相应位置。

 

连接点和切点:

  连接点是程序执行的某个特定位置,如类初始化前,类初始化后,方法调用前,方法调用后。

  连接点相当于数据库中的记录,切点相当于查询条件,一个切点可以匹配多个连接点。

 

增强(Advice):

  增强既包含用于添加到目标连接点上的一段执行逻辑,又包含用于定位连接点的方位信息。

  增强接口如:BeforeAdvice、AfterReturningAdvice

 

织入:

  织入是将增强添加到目标类的具体连接点上的过程。

  Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

 

切面(Aspect):

  切面由切点和增强组成,Spring AOP是负责实施切面的框架,它将切面所定义的横切逻辑织入切面所指定的连接点中。

 

增强类型:

  前置增强(BeforeAdvice):在目标方法执行前实施增强。

  后置增强(AfterReturningAdvice):在目标方法执行后实施增强。

  环绕增强(MethodInterceptor):在目标方法执行前后实施增强。

  异常抛出增强(ThrowsAdvice):在目标方法抛出异常后实施增强。

  引介增强(IntroductionInterceptor):在目标类中添加一些新的方法和属性。

 

切面类型:

  Advisor:一般切面,仅包含一个Advice,它代表的横切的连接点是所有目标类的所有方法,太宽泛,一般不用。

  PointcutAdvisor:具有切点的切面,可以通过类、方法名、方法方位等信息灵活定义切面的连接点。

  IntroductionAdvisor:引介切面,对应引介增强的特殊切面,应用于类层面上。

 

  Spring采用JDK动态代理和CGLib动态代理技术在运行期织入增强。

  Spring只能在方法级别上织入增强。

 

第八章 基于@AspectJ和Schema的AOP

 

注解版增强类型:

  @Before:前置增强

  @AfterReturning:后置增强

  @Around:环绕增强

  @AfterThrowing:抛出增强

  @After:Final增强,不管抛出异常还是正常退出,该增强都会得到执行

  @DeclareParents:引介增强

 

第十一章 Spring的事务管理

  Spring允许通过声明方式,在IoC配置中指定事务的边界和事务属性,Spring自动在指定的事务边界上应用事务属性。

  Spring的声明式事务管理是通过SpringAOP实现的。

  如果使用Spring JDBC和My Batis,可以使用DataSource TransactionManager这个基于数据源的事务管理器。

 

  Spring通过模板类降低了开发者使用各种数据持久化技术的难度。

  模板类需要绑定数据连接或会话的资源,这些资源是非线程安全的。

  Spring使用ThreadLocal解决线程安全的问题。

 

Spring事务传播行为:

 

 

  Spring默认的事务回滚规则为:运行期异常回滚,检查型异常不回滚。

 

使用注解配置声明式事务:

  使用@Transactional对类或方法进行事务增强的标注。

  在配置文件中加入<tx:annotation-driven transaction-manager="txManager"/>,对标注@Transactional的Bean进行加工处理,以织入事务管理切面。

 

 

第十七章 Spring MVC

 

 

 

 

转载于:https://www.cnblogs.com/mengchunchen/p/9798525.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微前端——无界wujie

B站课程视频 课程视频 课程课件笔记&#xff1a; 1.微前端 2.无界 现有的微前端框架&#xff1a;iframe、qiankun、Micro-app&#xff08;京东&#xff09;、EMP&#xff08;百度&#xff09;、无届 前置 初始化 新建一个文件夹 1.通过npm i typescript -g安装ts 2.然后可…

java executor spring_Spring+TaskExecutor实例

一 TaskExecutor接口Spring的TaskExecutor接口等同于Java.util.concurrent.Executor接口。 实际上&#xff0c;它存在的主要原因是为了在使用线程池的时候&#xff0c;将对Java 5的依赖抽象出来。 这个接口只有一个方法execute(Runnable task)&#xff0c;它根据线程池的语义和…

小程序居然可以用WXS模拟实现过滤器!

小程序目前官方还没有出过滤器&#xff0c;特别不方便&#xff0c;但是可以用wxs来模拟过滤器&#xff0c;话不多说&#xff0c;直接上代码。当然&#xff0c;不熟悉wxs的可以先看一下 官方文档 1.新建一个filter.wxs的文件我个人建议是一个过滤器写一个wxs&#xff0c;避免引用…

ADF:使用HTTP POST方法进行URL任务流调用

众所周知&#xff0c;可以通过某些URL直接从浏览器或某些外部应用程序调用有限任务流。 如果任务流的属性“ URL invoke”设置为“ url-invoke-allowed”&#xff0c;则启用此功能&#xff0c;该功能通常在集成项目中使用。 通常&#xff0c;客户端&#xff08;或调用者&#x…

java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...

一、缓存当系统的并发量上来了&#xff0c;如果我们频繁地去访问数据库&#xff0c;那么会使数据库的压力不断增大&#xff0c;在高峰时甚至可以出现数据库崩溃的现象。所以一般我们会使用缓存来解决这个数据库并发访问问题&#xff0c;用户访问进来&#xff0c;会先从缓存里查…

Spring MVC:带有CNVR卷的REST应用程序。 3

这是带有CNVR的Spring MVC REST教程的最后一部分。 在这里&#xff0c;我将演示所有这些东西如何工作&#xff0c;这是我在前两部分中开发的。 对于每种类型的CRUD操作&#xff0c;这将分为四个部分&#xff1a;CREATE&#xff0c;READ&#xff0c;UPDATE&#xff0c;DELETE。 …

java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

本文是Java IO总结系列篇的第4篇&#xff0c;前篇的访问地址如下&#xff1a;如果您阅读完成&#xff0c;觉得此文对您有帮助&#xff0c;请给我点个赞&#xff0c;您的支持是我不竭的创作动力。为了方便大家理解&#xff0c;我特意制作了本文对应的视频&#xff1a;总结删除文…

实现小程序canvas拖拽功能

组件地址 https://github.com/jasondu/wx-comp-canvas-drag 实现效果 如何实现 使用canvas使用movable-view标签 由于movable-view无法实现旋转&#xff0c;所以选择使用canvas 需要解决的问题 如何将多个元素渲染到canvas上如何知道手指在元素上、如果多个元素重叠如何知…

H5页面滚动阻尼效果实现

功能描述 要求 页面分为AB两个区域 当手机可视区的底部接触到 “阻尼带” 的时候&#xff0c;有个上拉弹性过程 当上拉到一定阈值程度就直接把B区顶部弹到手机可视区的顶部&#xff0c;让可视区从B区开始显示当上拉程度未到阈值&#xff0c;就回弹复原 当手机可视区从B区向上…

web 前端 html

1&#xff0c;什么是web 在网络中&#xff0c;大量的数据需要有一个载体&#xff0c;而很多人都能够访问这个载体&#xff0c;利用浏览器的这个窗口链接一个有一个载体&#xff0c;这个载体就是网站也就是web的前身。  1&#xff0c;web标准&#xff1a;结构标准&#xff0c;表…

再谈前后端分离

前段时间我针对手头上的项目前端配置进行了反思以及总结并且写了两篇文章: webpack传统后端渲染的项目前端配置, webpack配置之前后端不分离, 很显然这些配置能满足一时的需求, 但是也有不足. 今天继续总结, 这里应该不涉及到具体后端语言, 只对前端配置进行描述. 毕竟配置工程…

Python - day1 借鉴洪卫

一、了解开发语言 1、高级语言&#xff1a;Python&#xff0c;Java&#xff0c;C&#xff0c;C#&#xff0c;PHP&#xff0c;JS&#xff0c;Go&#xff0c;Ruby&#xff0c;SQL&#xff0c;Swift&#xff0c;Perl&#xff0c;Objective-C&#xff0c;R等等&#xff1b; 2、低级…

返回一个二维整数数组最大子数组的和

要求&#xff1a; 1&#xff0c;输入一个二维整形数组&#xff0c;数组里有正数也有负数。 2&#xff0c;二维数组中连续的一个子矩阵组成一个子数组&#xff0c;每个子数组都有一个和, 3&#xff0c;求所有子数组的和的最大值。 设计思路&#xff1a; 参照一维整数数组求解最大…

基于React的表单开发的分析(上)

本文主要讲解后台系统与表单相关的页面开发&#xff0c;并分析如何才能更好地、高效地开发。 技术栈 ReactAntd 背景 Antd 以下我都将Ant Design 简称为 Antd Ant Design是个服务于企业级产品的UI框架&#xff0c;主要可以用于中后台系统,它有基于React、Vue和Angular的实现…

50个Servlet面试问答

Servlet是Java EE的一个非常重要的主题&#xff0c;所有Web应用程序框架&#xff08;例如Spring和Struts&#xff09;都建立在它之上。 这使servlet成为Java访谈中的热门话题。 在这里&#xff0c;我提供了50个servlet面试问题的列表&#xff0c;并提供了答案&#xff0c;以帮…

深入浅出的webpack4构建工具--webpack4+react构建环境(二十)

下面我们来配置下webpack4react的开发环境&#xff0c;之前都是针对webpack4vue的。下面我们也是在之前项目结构的基础之上进行配置下。 首先看下如下是我为 webpack4react 基本的项目结构如下&#xff1a; ### 目录结构如下&#xff1a; demo1 …

Webpack 4进阶--从前的日色变得慢 ,一下午只够打一次包

从前的日色变得慢&#xff0c;车&#xff0c;马&#xff0c;邮件都慢&#xff0c;一生只够爱一个人 -- 《从前慢》 近期在团队项目里把Webpack升级到4.4.1&#xff0c;过程中发现现存的升级文档十分有限&#xff0c;踩了不少坑&#xff0c;好在升级之后提升还算显著&#xff0c…

编码Java时的10个微妙的最佳实践

这是10个最佳实践的列表&#xff0c;这些最佳实践比您的平均Josh Bloch有效Java规则要微妙得多。 尽管Josh Bloch的列表很容易学习&#xff0c;并且涉及日常情况&#xff0c;但此处的列表包含了涉及API / SPI设计的较不常见的情况&#xff0c;但可能会产生很大的影响。 我在编…

Vue 实现微信 jssdk 扫码, 上传图片

流程 1: 配置微信公众号JS域名 2:前端发送URL后台获取JSSDK配置, 后台Service代码如下, 修改2处位置: WeixinUtil.APPID > 当前公众号APPID WeixinUtil.getAccessToken() > 当前公众号access_token public interface IWxJssdkService {Map<String, Object> getJssd…

使用Storm进行可扩展的实时状态更新

在本文中&#xff0c;我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态。 Storm是基于事件的数据处理引擎。 它的模型依赖于基本原语&#xff0c;例如事件转换&#xff0c;过滤&#xff0c;聚合……&#xff0c;我们将它们组合成拓扑…