当前位置: 首页 > 编程日记 > 正文

Spring原理总结

写在前面:技术常新,思想常存。

Spring全家桶过于庞大,学习时难以抓住重点,希望通过此文章,让大家更好地去学习这一框架技术。
Spring有两大内功:IoC容器和AOP。这两个东西是不管什么时候都不会改变的。即便今天有了Spring Boot,也是需要了解的。
在这里插入图片描述
这个图是今天的软件项目基本都会基于的模式。即MVC。最左边的用户,最终是要获取/修改最右边的数据库里的数据。中间不管通过什么语言或什么方式,基本都可以分为三层,表示层如果不是jsp换成app都没有什么问题,业务逻辑层称为business/service都可以,模型层负责和数据库进行交互,提供数据给业务逻辑。
在这里插入图片描述
Spring IoC干了什么工作?它提供了一个容器,这个容器其实就是一个工厂,帮我们生产对象的,也就是上述三层各有什么对象,统一放到容器里边管理。这样做的好处是:解开层与层,对象和对象之间的耦合。让开发表示层的人不用了解业务逻辑,开发业务逻辑层的人,不用了解模型层。这其实就是软件开发架构里最核心的概念。通过这样的方式来提高整个软件的可维护和可复用性。(Linux系统课会讲到怎么使得软件高可用和高可靠)总之,纵向被切割开来了。可根据实际情况切割得更细。在实际公司里边就可以分成表示层组,业务逻辑组,模型组。他们相互间不需要什么协作,基本以文档或接口就能开工。
在这里插入图片描述
AOP干什么呢?AOP是横向地去切,比如说当表示层和业务逻辑层都要做日志时,就形成一个切面。切割地越细,可复用性和可维护性就越高。某一小块有问题,更改这一小块就行了。

我们在学框架时,真正需要理解和学会的是图里面的概念。技术层面常常会发生改变。

十年前学Spring,大部分是基于XML配置,学了将近半个月去了解各种配置怎么写,才能使软件跑起来。但很快,注解就开始流行起来,再过一两年,基本不用XML了。紧接着就出现了Spring Boot,几乎不需要配置了。

当然,不实现思想不能深刻理解。但实现不是最重要的。

相关文章:

尚国栋:金融风控贷款违约预测(天池学习赛)

尚国栋是华北电力大学数理系大三的学生,LSGO软件技术团队(Dreamtech算法组)成员,参加了多期Datawhale的组队学习,荣获多期优秀队长的称号。 希望参与我们线下组队学习的同学,可以在微信公众号后台回复 线下…

树莓派修改密码(有单独屏幕)

在树莓派终端输入 sudo passwd pi改的是派的密码。 注意:和 sudo passwd root区分 Linux有密码保护,输入了看上去和没输入一样,其实已经输入了

Python每日一练0023

问题 如何判断一个文件是否存在 解决方案 这个问题可以分成几类问题 如果这里的文件指的是文件或目录,我们可以用os.path.exists()方法 >>> import os >>> os.path.exists(test) True 如果这里的文件指的是普通的文件,我们可以用os.pa…

火狐拓展开发 基础知识

平时经常碰到一些零碎的知识,或者其他什么好文章/知识点/插件/库等等,因为实在太多书签已插乱...于是想着干脆写个火狐小add-on。 首先找到了这里ADD-ON SDK: Using the Add-on SDK you can create Firefox add-ons using standard Web techn…

尚育鹏:Leetcode刷题总结(数组)

尚育鹏是华北电力大学数理系大二的学生,LSGO软件技术团队(Dreamtech算法组)成员,参加了多期Datawhale的组队学习。 希望参与我们线下组队学习的同学,可以在微信公众号后台回复 线下组队学习,进入线下组队学…

树莓派实现人脸识别需要做的那些事

1.连接数据库,建表,用来存放图像转码后的字符 2.用Pycharm连接上树莓派 3.下载安装face_recognition需要的依赖 4.配置好环境后运行代码

spring boot 实战 / 可执行war启动参数详解

概述 上一篇文章《spring boot 实战 / mvn spring-boot:run 参数详解》主要讲解了spring boot 项目基于maven插件启动过程中借助profiles的切换工作环境的问题。  这里我们讲一下spring boot项目基于可执行war包启动过程中借助profiles切换工作环境的问题。 配置 这里我们修改…

1476. Lunar Code

http://acm.timus.ru/problem.aspx?space1&num1476 由于前一列对后一列有影响,所以需要保持前一列的状态, 但无需用状态压缩来保存(也保存不了) 只需要保存前一列以 k 个0结尾的个数就可以 代码: import java.mat…

【组队学习】【33期】吃瓜教程——西瓜书+南瓜书

吃瓜教程——西瓜书南瓜书 航路开辟者:谢文睿、秦州领航员:潘磊航海士:谢文睿、秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bookB 站视频:https://www.bilibili.com/video/BV1Mh411e7VU内容…

FIRST集与FOLLOW集构造步骤

首先,这两个集主语是候选式,是V*中的一个终结符/非终结符。 由于FOLLOW集的定义和构造步骤里面都涉及FIRST集,故先介绍FIRST集。 一.FIRST集的定义如下: FIRST(α){a|α>aβ, a∈Vt, α, β∈V*},若α>(*)ε则规定ε∈FRIS…

Bossie Awards 2013:最佳开源数据中心和云软件

当Facebook 的开源计算项目(OCP)酝酿着设计更好的服务器和网络时,其他开源项目也纷纷重塑数据库,应用平台以及下一代应用程序的虚拟化层。你还不知道吧,下一代的“云”基础设施管理工具终将来自开源产品。 近日&#x…

Laravel开启跨域的方法

1、建立中间件Cors.php 命令&#xff1a;php artisan make:middleware Cors 在/app/Http/Middleware/ 目录下会出现一个Cors.php 文件。 内容如下&#xff1a; <?phpnamespace App\Http\Middleware;use Closure;class Cors {/*** Handle an incoming request.** param \Il…

【组队学习】【33期】动手学数据分析

动手学数据分析 航路开辟者&#xff1a;陈安东、金娟娟、杨佳达、老表、李玲、张文涛、高立业领航员&#xff1a;张文恺航海士&#xff1a;武帅、戴治旭、初晓宇 基本信息 内容属性&#xff1a;精品入门课系列开源内容&#xff1a;https://github.com/datawhalechina/hands-…

LL(1)预测分析表的构造

LL(1)分析法&#xff08;即预测分析法&#xff09;是自上而下文法中的一种&#xff0c;使用这种方法需要用到LL(1)预测分析表。 前提&#xff1a;掌握了FIRST集和FOLLOW集的构造。 步骤&#xff1a;对于每一个产生式A→α &#xff08;1&#xff09; 对每个终结符a∈FIRST(α)…

新的sublime text已经上传网盘,地址写在下面

注&#xff1a;新网盘地址&#xff0c;之前的关于sublime text的网盘地址已效 网盘地址&#xff1a;http://pan.baidu.com/s/1oVHAm 压缩文件结构 从上到下依次是&#xff1a; 1.sublime text3 32bit便携版本的压缩包&#xff0c;解压可用. 64bit的用户可以将&#xff1a;http:…

WebAssembly Studio:Mozilla提供的WASM工具

\看新闻很累&#xff1f;看技术新闻更累&#xff1f;试试下载InfoQ手机客户端&#xff0c;每天上下班路上听新闻&#xff0c;有趣还有料&#xff01;\\\WebAssembly Studio是Mozilla开发的一款在线工具&#xff0c;用于将C/C和Rust代码编译为WASM格式。\\WebAssembly Studio是M…

【组队学习】【33期】3. 李宏毅机器学习(含深度学习)

李宏毅机器学习&#xff08;含深度学习&#xff09; 航路开辟者&#xff1a;王茂霖、陈安东&#xff0c;刘峥嵘&#xff0c;李玲领航员&#xff1a;宋泽山航海士&#xff1a;汪健麟、叶梁 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/leeml-notes开源内…

Linux 引导和系统启动

bootstrap 引导程序;鞋带 -> 简称 boot 启动 pull oneself up by one’s bootstraps.&#xff08;体现计算机系统启动的难处&#xff09; Linux系统启动分为两大部分&#xff1a; 一&#xff0e; 第一部分&#xff1a;机器启动&#xff08;BIOS到 加载内核 &#xff0c;…

【数据结构】支持四则混合运算的计算器(转)

1.给出两个数&#xff0c;用户再指定操作符&#xff0c;要求计算结果&#xff0c;这实现起来很容易&#xff1b; 2.多个数&#xff0c;但只涉及同一优先级的操作符&#xff0c;做起来也很容易&#xff1b; 3.多个数&#xff0c;不同优先级的操作符&#xff0c;怎么办呢&#xf…

TypeScript学习笔记之 接口(Interface)

在java中&#xff0c;接口是用来定义一些规范&#xff0c;使用这些接口&#xff0c;就必须实现接口中的方法&#xff0c;而且接口中的属性必须是常量。javascript中是没有接口的概念的。所以TypeScript在编译成 JavaScript 的时候&#xff0c;所有的接口都会被擦除掉。 而TypeS…

【组队学习】【33期】数据可视化(Matplotlib)

数据可视化&#xff08;Matplotlib&#xff09; 航路开辟者&#xff1a;杨剑砺、杨煜、耿远昊、李运佳、居凤霞领航员&#xff1a;王森航海士&#xff1a;肖明远、郭棉昇 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/fantastic-matplotlib开源内容&…

布尔定理及证明(完整版)

这篇文章的目的是以布尔代数公理证明定理。 对偶原理&#xff1a;0with1, with 互换以后&#xff0c;公理&#xff08;定理&#xff09;任然成立。 布尔代数的公理如下 单变量的布尔代数定理如下 单变量的布尔代数定理很容易用真值表证明。 多变量的布尔定理如下 交换律&…

创建DLL动态链接库——声明导出法

DLL声明导出法&#xff1a;是通过使用__declspec(dllexport)&#xff0c;添加到需要导出的函数前&#xff0c;进行声明。 头文件定义如下(OPdll.h)&#xff1a; 源文件定义如下(OPdll.cpp)&#xff1a; 通过以上两个文件&#xff0c;编译过后即可生成OPdll.lib和OPdll.dll两个库…

【组队学习】【33期】Scratch(一级)

Scratch一级 航路开辟者&#xff1a;王思齐、马燕鹏领航员&#xff1a;马燕鹏航海士&#xff1a;马燕鹏 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/Scratch内容属性&#xff1a;公测课程内容说明&#xff1a;抽取…

Bzoj2780: [Spoj]8093 Sevenk Love Oimaster

题目 传送门 Sol 就是广义\(sam\) 然后记录下每个状态属于哪些串&#xff0c;开\(set\)维护\(parent\)树上启发式合并一下就好了 # include <bits/stdc.h> # define RG register # define IL inline # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; t…

LR分析法从理解到运用

1、 LR分析器 解释&#xff1a; 分析栈包括符号栈和相应状态栈 分析表包括ACTION表和GOTO表 Ⅰ动作表元素action[Si,aj] 表示当前栈顶状态为S&#xff0c;输入符号为a时所执行的动作。有四种情况&#xff1a;S(移进)&#xff0c;r(归约)&#xff0c;acc(接受)&#xff0c;erro…

Android 判断SD卡是否存在及容量查询

转载&#xff1a;http://blog.csdn.net/xinzheng_wang/article/details/7827775 Android 判断SD卡是否存在及容量查询的简单方法如下&#xff1a;首先要在AndroidManifest.xml中增加SD卡访问权限 [html] view plaincopy <!-- 在SDCard中创建与删除文件权限 --> <uses…

Spring Boot 教程(三): Spring Boot 整合Mybatis

教程简介 本项目内容为Spring Boot教程样例。目的是通过学习本系列教程&#xff0c;读者可以从0到1掌握spring boot的知识&#xff0c;并且可以运用到项目中。如您觉得该项目对您有用&#xff0c;欢迎点击收藏和点赞按钮&#xff0c;给予支持&#xff01;&#xff01;教程连载中…

电子学会 软件编程(图形化)一级训练营

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 电子学会 软件编程&#xff08;图形化&#xff09;一级训练营 试题来源 青少…

win10 安装 python报错-已安装这个产品的另一版本

尝试清理干净电脑上关于之前安装的Python3&#xff0c;在 输入winR 输入cmd 回车 输入 python 回车 却看到 C:\Users\86136>python ‘python’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 但是再安装&#xff0c;又报出严重错误。 最终解决方案&am…