了解Spring

Spring概述

官网地址:https://spring.io/

Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用

Spring 框架来创建性能好、易于测试、可重用的代码。

Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首

次在 Apache 2.0 许可下发布。Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。

Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应

用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

Spring家族

Spring家族体系包括了Spring Core、Spring Data、Spring Boot、Spring Security、Spring Cloud等,其中Spring Core很重要,然后Spring Cloud占了很大的一个模块。

Spring的发展:

第一阶段:Spring Core、Spring Security、Spring Data,低耦合、可扩展,最初用工厂模式来解耦;

第二阶段:Spring Boot。从可用到好用。开发了很多懒人包,及starter,这些懒人包的集合即Spring Boot。

第三阶段:Spring Cloud,微服务解决方案,开箱即用。

第四阶段:Spring Cloud Dataflow+容器。

Spring Framework

Spring 基础框架,可以视为 Spring 基础设施,基本上任何其他 Spring 项目都是以 Spring Framework为基础的。

Spring Framework特性

  • 非侵入式:对原生技术 和 领域模型是零污染。
  • 控制反转IOC:反转资源获取方向,将自己创建资源、向环境索取资源 → 环境将资源准备好、我们享受资源注入(降低对象与对象的依赖关系)。
  • 面向切面AOP:在不修改源代码的基础上,将容器内对象替换成代理类,再完成注入 → 增强代码功能。
  • 容器:SpringIOC是一个容器,因为它包含并且管理组件的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大降低了使用门槛。
  • 声明式:很多以前需要编写代码才能实现的功能,现在只需要声明需求即可由框架代为实现的。
  • 组件化:组件即放在容器当中bean,并且使用注入完整组件的组装。
  • 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的地方库。而且Spring家族系列已经覆盖了广泛的领域,很多方面的功能性需求可以在Spring Framework 的基础上全部使用Spring 来实现

Spring Framework五大功能模块(仅是Spring Framework)

功能模块

功能介绍

Core Container

核心容器、在Spring环境下使用任何功能都必须基于IOC容器。

AOP & Aspects

面向切面编程

Testing

提供了对Junit 或 TestNG 测试框架的整合

Data Access / Integration

提供了对数据访问/集成的功能 (SpringJDBC

Spring MVC

提供了面向Web应用程序的集成功能

公众号本文地址:https://mp.weixin.qq.com/s/kGs659rAUe0NqOxlR5FVcA

欢迎关注公众号:愚生浅末。

本文转载于网络 如有侵权请联系删除

相关文章

  • 游戏3d模型如何放到计算机中,三维建模技术在三维游戏中的应用

    大家好,又见面了,我是你们的朋友全栈君。张程怡摘要计算机图像技术及三维建模技术的不断发展,是三维游戏出现的重要原因之一。三维建模技术可以将现实中的物品和人在二维平面进行三维形态的模拟或再加工,达到将美术设计和计算机技术有机结合的效果,给人立体真实的感受。因此在三维游戏的制造过程中,三维建模技术得到了广泛应用。文章对三维建模技术的发展历程,三维建模技术在游戏中的运用原理进行了介绍,同时对于三维建模技术在三维游戏应用中仍存的问题及其发展趋势进行了研究和展望。关键词三维建模;游戏;CAD技术;场景建模中图分类号TP3文献标识码A文章编号1674-6708(2018)223-0149-02随着计算机技术的发展和人们对于精神文化方面需求的增长,游戏逐渐成为人们所喜爱的一种娱乐方式,特别在年轻人中十分受欢迎。我国游戏市场规模也占据了全球超50%的游戏市场规模,游戏研发以及与之相关的游戏直播、电竞等多项行业都处于高速发展的态势之中。而在所有游戏中三维游戏以其自由度高和生动真实的特点脱颖而出,受到大众的喜爱。以绝地求生为例,从2017年3月发售至2018年2月,全球全部玩家总游戏时长已超27亿小时。随

  • 成员网研会:Flink操作器 = Beam-on-Flink-on-K8s(视频+PDF)

    讲者:AniketMokashi,工程经理@谷歌;DagangWei,软件工程师@谷歌开源一直是谷歌云的数据和分析策略的核心支柱。从2004年的mapreduce论文开始,到最近发布的用于ML的Tensorflow开源版本,用于数据处理的ApacheBeam,甚至Kubernetes本身,谷歌已经围绕它的开源技术和跨公司边界建立了社区。大量传统企业正在规划以混合云和多云为核心的云转型。Kubernetes提供了一个平台,可以轻松地将应用程序从本地移植到各种公共云上。最近,谷歌的云Dataproc团队接受了在基于Kubernetes的集群的Flinkrunner上运行ApacheBeam的挑战。这种架构为使用Python提供了一个很好的选择,并且在你的数据流水线中提供了大量的机器学习库。然而,Beam-on-Flink-on-K8s堆栈带来了很多复杂性。这些复杂性就是为什么我们构建了一个完全开源的Flink操作器(Operator),它不仅抽象了运行这些复杂流水线的谷歌最佳实践,而且还提供了一组紧密的API,使在你的公司中运行Flink流水线变得很容易。加入我们的会议,深入了解Kuber

  • 设计+科学,我们这么玩!

    2019年腾讯科学WE大会以「小宇宙」揭开了序幕,给大家带来了一场精彩绝伦的科学盛会。而在色彩斑斓的「小宇宙」背后,是策划团队与设计团队历经千锤百炼才孵化成型的。本文将细细阐述这段孵化之路中所经历的种种艰难险阻与过关斩将的历程。项目背景腾讯科学WE大会在历经数年的品牌积累与沉淀,已然成为中国最具影响力的科学盛会之一。从首届的「为未来而来」至今年的「小宇宙」,WE大会每年皆以不同的主题表述对未知领域的洞察,以此逐渐地建构出其独特的品牌形象。要如何利用视觉语言阐释主题内涵,进而延续并拓展品牌形象,是设计团队的首要任务。 品牌定位从2015年开始,设计团队对WE大会进行系统化的品牌管理:基于大会的定位与属性,我们首先确立了大会的视觉基调——前瞻的实验风格,并以此调性去探索合适的视觉表达式来演绎大会主题的核心内涵。如此不走寻常路的设计方式是期望将科学探索那般的求知精神融入至设计过程中,以契合科学WE大会多维度、实验性及探索性的形象特质。 以下是往届基于品牌形象的设定,所创造出来的视觉演绎:主题思考1. 锁定主题方向 在「小宇宙」未拟定为本次的大会主题以前,设计团队与策划团队经历了多次头脑风暴,

  • WEB性能–UDP

    一、UDP介绍1980年8月,紧随TCP/IP之后,UDP(UserDatagramProtocol,用户数据报协议)被加入了核心网络协议套件。UDP的主要功能和亮点并不在于它引入了什么特性,而在于它忽略的那些特性。UDP一般称为无(NULL)协议,RFC768描述了它的运作机制,全文完全可以写在一张餐巾纸上!数据报:一个完整、独立的数据实体,携带者从源节点到目的节点的足够信息,对这些节点间之前的数据交换和传输网络没有任何依赖。 数据报(datagram)和分组(packet)经常被搞混。其实他们是有区别的:分组可以用来指代任何格式化的数据块,而数据报则通常只用来描述那些通过不可靠的服务传输的分组,既不保证送达,也不发送失败通知。正因为如此,很多场合下人们都把UDP中的User换成Unreliable。于是UDP成了“不可靠数据报协议”。关于UDP的应用,最广为人知的就是DNS(DomainNameSystem,域名系统)。DNS负责把对人类友好的域名换成对应的IP地址。可是,尽管浏览器会依赖于UDP,但是这个协议以前从未被看成是网页或应用的关键传输机制。不过这都是过去的事了。IETF

  • Linux平台 Oracle 18c RAC安装Part1

    一、实施前期准备工作1.1服务器安装操作系统1.2Oracle安装介质1.3共享存储规划1.4网络规范分配二、安装前期准备工作2.1各节点系统时间校对2.2各节点关闭防火墙和SELinux2.3各节点检查系统依赖包安装情况2.4各节点配置/etc/hosts2.5各节点创建需要的用户和组2.6各节点创建安装目录2.7各节点系统配置文件修改2.8各节点设置用户的环境变量Linux平台Oracle18cRAC安装指导: Part1:Linux平台Oracle18cRAC安装Part1:准备工作 Part2:Linux平台Oracle18cRAC安装Part2:GI配置 Part3:Linux平台Oracle18cRAC安装Part3:DB配置本文安装环境:OEL7.5+Oracle18.3GI&RAC一、实施前期准备工作1.1服务器安装操作系统配置完全相同的两台服务器,安装相同版本的Linux操作系统。留存系统光盘或者镜像文件。 我这里是OEL7.5,系统目录大小均一致。对应OEL7.5的系统镜像文件放在服务器上,供后面配置本地yum使用。 1.2Oracle安装介质Oracle1

  • 2018-11-28 最常用的Intellij IDEA快捷键

    语句感知选择器快捷键:CTRL+W/CMD+W作用:这可以用来选中上下文代码。当你需要选择大块或只是一段代码的特定部分时,它可以起到非常棒的作用。如果您有以下代码:files.getFiles().forEach(auctionFile->createAuctionFile(realm,auctionFile));,您可以将光标置于auctionFile中并按下快捷键,它将选择auctionFile。再按一次,选择将展开并选中auctionFile->createAuctionFile(realm,auctionFile)。如果再次按下,则选择将继续展开并选中files.getFiles().forEach(auctionFile->createAuctionFile(realm,auctionFile))。再按最后一次,你就会完整地选中这段代码。如果你把它与SHIFT结合,你也可以通过上下文来取消选择。最近浏览的文件快捷键:CTRL+E/CMD+E作用:这会弹出一个窗口,其中包含了您在IDE中最近打开过的文件。如果你输入一下内容,它会根据名称进行过滤。[图片上传失败

  • 微信小程序新版二维码出炉!居然一眼就记住了

    是的,微信小程序又有新动作了。仍是熟悉的夜间模式,仍是熟悉的出人意料。但这次发布的,并不是熟悉的新能力,而是把大家再熟悉不过的二维码换了个并不熟悉的新造型。下图便是这次事件的主角:微信特制的小程序码。只要你的微信升级到了6.5.7版本,就可以扫码或者长按识别打开相应的小程序。不用怀疑,这个神奇的图形就是个二维码,只不过长得有点像菊花罢了,而且一出生就自带光芒和dangdangdangdang的BGM哦。小程序有了新二维码,旧的小程序二维码会失效吗?经知晓程序(微信号zxcx0101)实测,虽然它不方了,但也不用慌,旧码可以正常打开。相信大家都很好奇,微信为什么要推出一款造型如此独特的小程序码呢?我们无责任推理了一下,可能是:让大小程序成为最闪亮独特的一颗星,一眼就能把它跟公众号、app的二维码区分开。方形二维码太丑了,这一点,密集恐惧者都知道。不是说小程序降温了吗?造个热点给大家玩一下。当然,这只是深夜无责任推理,这个小程序码是否有什么隐藏技能呢?大家也不妨推测一下。最后,知晓程序想提醒一下广大小程序开发者,别光顾着玩新码,记得去小程序商店minapp.com更新你的小程序码哦,让你的

  • 第七章:使用QueryDSL与SpringDataJPA实现子查询

    在上一章我们讲到了QueryDSL的聚合函数,让我们重新认识了QueryDSL的便利之处,它可以很好的使用原生SQL的思想来进行Java形式的描述,编写完成也不需要考虑更换数据库存在的不兼容问题。当然QueryDSL还有很多我们没有发掘出来的核心技术,我们今天来讲解下”子查询“,看看QueryDSL是怎么完美的诠释了使用Java写SQL。本章目标基于SpringBoot平台完成QueryDSL整合JPA实现多表、单表子查询。构建项目我们使用idea工具创建一个SpringBoot项目,然后添加部分依赖并配置QueryDSL自动生成QueryBean插件,pom.xml代码如下所示:<?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio

  • Linux系列教程(十一)——Linux软件包管理之RPM命令

      前面我们介绍了Linux系统的常用命令介绍和文本编辑器vim命令的介绍。那么从这篇博客开始,我们会正式的讲解Linux的系统管理,首先要讲的是Linux的软件包管理。1、Linux软件包分类  一、源码包    源码包能直接看到源码,安装时需要人为手工设置安装位置,一般是/usr/local/软件名/。源码包的升级版——脚本安装包,人为的改动源码使其有安装界面。    优点:    ①、开源,如果有足够的能力,可以直接修改源代码。    ②、安装时可以自由选择所需的功能。    ③、软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高。    ④、卸载方便,直接删了你安装软件的那个目录就好了。    缺点:    ①、安装步骤较多,尤其安装较大的软件集合时,容易出现拼写错误。    ②、编译时间过长,比后面讲的二进制安装时间长。    ③、因为是编译安装,安装过程中一旦报错新手很难解决。  二、二进制包    这里的二进制包最要包括centos中的rpm包。rpm包有默认安装位置。/etc/配置文件安装目录;/usr/bin/可执行的命令安装目录;/usr/lib/程序所使用

  • Ubuntu18.04安装MySQL

    前言:   安装过程同样适用于ubuntu16.04   安装步骤: 1、在Terminal中输入以下命令即可安装MySQL:   sudoaptinstallmysql-server 上述命令会安装以下包:  apparmor  mysql-client-5.7  mysql-common  mysql-server  mysql-server-5.7  mysql-server-core-5.7因此无需再安装mysql-client等。安装过程会提示设置mysqlroot用户的密码,设置完成后等待自动安装即可。默认安装完成就启动了mysql。   2、启动和关闭MySQL服务器:   开启:servicemysqlstart   关闭:servicemysqlstop      3、确认是否启动成功:   sudonetstat-tap|grepmysql    上述的可能会报错说没有netstat的命令,需要安装netstat,命令如下:   aptinstallnet-tools      4、进入mysqlshell界面:   mysq

  • 关于缓存的几篇好文章

    追求极致:从技术细节看美团架构 Memcache架构新思考 Memcache应用场景介绍,说明[zz] 大型web系统数据缓存设计-l转载 大型网站后台架构的WebServer与缓存 IntelligenceComputing 微博到底有多重视分布式缓存(上) Beanstalkd一个高性能分布式内存队列系统 从技术细节看美团的架构 图片服务架构学习之ZIMG 对Memcached使用的总结和使用场景 memcached真实项目中的应用 SESSION存储在memcached遇到的问题 传统MySQL+Memcached架构遇到的问题 出处:http://cnblogs.com/daishuguang

  • 颜色表及html代码

    颜色名称及色样表(HTML版)       颜色名 中文名称 Hex RGB 十进制Decimal     LightPink 浅粉红 #FFB6C1 255,182,193     Pink 粉红 #FFC0CB 255,192,203     Crimson 深红(猩红) #DC143C 220,20,60     LavenderBlush 淡紫红 #FFF0F5 255,240,245     PaleVioletRed 弱紫罗兰红 #DB7093 219,112,147     HotPink 热情的粉红 #FF69B4 255,105,180     DeepPink 深粉红 #FF1493 255,20,147     MediumVioletRed 中紫罗兰红 #C71585 199,21,133     Or

  • Python-操作Excel

    一、Excel模块:xlrd(读)、xlwt(写)、xlutils(结合读写可修改excel) 1、从mysql中读取数据 importxlrd,xlwt,xlutils importpymysql defsql_connect(sql): conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',db='sql_python',charset='utf8') cur=conn.cursor() cur.execute(sql) data=cur.fetchall() cur.close() conn.close() returndata复制   2、从mysql中读取数据写入excel中 #写数据 defwrite_excel(filename,data): book=xlwt.Workbook()#创建excel对象 sheet=book.add_sheet('sheet1')#添加一个表 c=0#保存当前列 fordindata:#取出data中的每一个元组存到表

  • 转:Oracle RAC万能集群测试大全 支持11g/12c/18c/19c版本

    生产环境OracleRAC集群测试最佳方法(支持Oracle11g/12c/18c/19cRAC安装后期测试过程) 一、OracleRAC集群测试背景 某中大型制造业公司,由于要新上项目,建设了一套业务系统-ERP系统,这套系统的数据库环境是OracleRAC(RHELLinux7+Oracle11gR2RAC)架构,根据风哥提供的建设方案项目已经建设完成。 这套ERP系统的RAC集群数据库在上线之前,我们需要对RAC集群做一些功能测试,这个测试方法适用于Oracle11g/12c,也适用于oracle18c/19c。 二、OracleRAC集群的介绍 在测试之前,这里风哥给大家介绍一下OracleRAC是什么:Oracle真正应用集群技术(OracleRealApplicationCluster)是Oracle9i及以后版本,Oracle9i之前叫OPS集群。OracleRAC主要支持Oracle9i、10g、11g、12c版本(18c,19c)。在OracleRAC环境下,Oracle集群提供了集群软件和存储管理软件,集群软件CRS/GRID,存储管理软件ASM(自动存储管理),多

  • C语言回调函数

    1#include<stdio.h> 2 3voidPrintNum1(intn); 4voidPrintNum2(intn); 5voidShowNum(intn,void(*ptr)(int)); 6 7voidPrintMessage1(); 8voidPrintMessage2(); 9voidPrintMessage3(); 10voidShowMessage(void(*ptr)()); 11 12intmain(){ 13ShowNum(11111,PrintNum1); 14ShowNum(22222,PrintNum2); 15ShowMessage(PrintMessage1); 16ShowMessage(PrintMessage2); 17ShowMessage(PrintMessage3); 18} 19 20voidPrintNum1(intn){ 21printf("Test1iscalled,thenumberis%d\n",n); 22} 23 24voidPrintNum2(intn){ 25printf("Test2iscalled,t

  • 汉字拼音首字母

    CREATEDEFINER=`root`@`%`FUNCTION`getFirstPyCpp`(parssVARCHAR(255))RETURNSvarchar(1000)CHARSETutf8 BEGIN DECLAREvrerurVARCHAR(255); DECLAREvfirstchaVARCHAR(2); SETvfirstcha=UPPER(LEFT(parss,1)); SETvrerur=vfirstcha; IFLENGTH(vfirstcha)<>CHARACTER_LENGTH(vfirstcha)THEN SETvrerur=ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(parssUSINGgbk),1)),16,10), 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCE

  • 注释

    #<u>注释是非常重要的</u> 在代码中,注释并不会被执行,仅用于程序猿理解 Java中的注释有三种 -单行注释:使用//表示-多行注释:使用/**/表示 如/* 阿巴阿巴 阿巴阿巴 */ -文档注释:/***/doc中会用到 /** *阿巴阿巴 *阿巴阿巴 */

  • ida flare_emu模拟执行批量解密字符串(Orchard_Botnet)

    ?前言 在恶意软件对抗中,经常遇到字符串自解密函数,并且大部分使用的频率还不低。如果算法是基本的f(a)=b模式的话,可能首先想到的是动态调试拿解密后字符串,但是这样效率很低。? 或者使用idapyhton来本地写出解密方案,再通过一层层寻找解密相关的传参指令找到需要的input。这种方法比较通用,但是找参数的话可能会遇到字符串传参形式多变的情况。 比如开发者使用堆栈字符串传参,在另一个地方使用动态生成。谁也不想对抗脚本里面全是ifelsetry等... 在早些时候?曾在kx上发过类似的解密案例。 本次使用的样本是?360NetLab中的僵尸网络Orchard。 md5:cb442cbff066dfef2e3ff0c56610148f。你可以在公众号内回复cb442cbff066获取样本,但是毕竟是恶意样本,请在隔离环境分析运行?。 ?简单分析 我们不去关注样本的其他行为,这不是帖子的主要目的,主要是针对其解密函数位置,把堆中的字符串存放到栈中,然后创建解密对象,传递给解密函数 解密函数经过分析复原如下: defdecrypt(data): alphabet="!\"#$%&

  • 容易遗忘的Javascript点

      1.关于 JavaScript中的 Array.prototype.slice.call() functiontest(){ var_args=Array.prototype.slice.call(arguments); console.log(args); } test(1,3);//[1,3]复制 此函数可以将类数组(此处为arguments)转换为真正的数组, 这个方法可以类数组转换成真正数组 。前提是此对象有length属性。(IE下Dom节点集合不可转)   1)先来说一个有趣的分享。 vara_arr=[1,2,3]; a_arr.get=function(){return0}; 由于a_arr是一个附带get方法的一个数组。大家不用觉得奇怪,数组是对象,这么加个get方法没有毛病。Array.prototype.slice.call(a_arr)  //  ==>>[1,2,3] 输出变成这样。 说明slice过程会仅仅保留数组部分,不会保留其他杂项。

  • Eclipse背景颜色修改

    文章来自:http://blog.csdn.net/songxingfeng/article/details/7790582 Eclipse背景颜色修改: 操作界面默认颜色为白色。对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些。设置方法如下: 1、打开window-&gt;Preference,弹出Preference面板 2、展开General标签,选中Editors选项,展开。 3、选中TestEditors,右边出现TestEditors面板。面板中有这样一个选项:Appearancecoloroptions;其中是各种板块颜色的设置,其中有一项是backgroundcolor,根据自己的喜好选择颜色。 4、选中backgroundcolor,勾掉SystemDefault,点击'color',弹出颜色选择面板,选择喜好的颜色,单击确定。 5、返回TestEditors,单击Apply即可。展开TestEditors,还有其他选项,比如对错误提示

  • 一个界面的前世今生----白鹭引擎的UI 部分学习笔记(学习笔记1)

    1.瞎几把弄一个skin文件+瞎几把写一个class 我是界面王二狗 extendsUiPanelBase 2.注册skin和class,将他们进行交配(register),并且给他们的家庭一个门牌号(panelID); 3.他们家上台表演了:showPanel->setcurrentPanel->得到这个panel的data,如果这个panel是属于一个group的字界面,将paneldata的groupid设置为groupdata的id,还要给获取到这个group的groupdata,将groupdata的openid设置为panel的id,将两者绑定起来。 4.如果是panel或者已经打开了group的界面,则创建这个界面的class的对象,这个是必须要创建的。如果是group子界面,并且这个group不存在,则需要创建这个group的class的对象,然后把group对象的openid设置为这个子界面的id。 5.创建了界面的class的对象,然后就开始去加载这个对象,即调用这个对象的load函数,这个load函数其实就是父类Panel(face

相关推荐

推荐阅读