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

spring体系

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、spring从体系架构上分为

1. 基本组件框架组合:Spring Framework

2.专项领域应用组件:Spring Portfolio

这个Spring Portfolio主要应用满足于特定的的应用场合:包括了spring Security/spring boot等等

这里主要阐述基本组件框架组合:Spring Framework。

二、Spring Framework

spring框架的发布版本包括了20个不同的模块。每个模块有3个JAR文件。这20个模块依据所属功能可以划分为6类不同的功能!如下图:

1. spring核心容器

核心容器是spring框架最核心的部分,它管理着spring应用中bean的创建、配置和管理等等主要为ID依赖注入功能!该功能是spring的两大核心之一!

2. spring的AOP模块

这个模块是spring应用系统中开发切面的基础

3. 数据访问和集成:

主要用于访问数据持久层(数据库数据等)。包括了简化的JDBC、DAO及框架型ORM如:Mybatis和Hibernate

4. Web和远程调用

此部分解决了web应用的MVC模型。所以这里集合了spring-MVC框架。另外还支持了用于分布式场景的REST API标准等等!

5. Instrumentation:提供JVM的代理

6. 测试:这是spring的测试单元模块,可以模拟用户的请求场景等测试!

三、spring的两个核心内容

DI【依赖注入】和AOP【面向切面】

1.  spring DI【依赖注入】

A. 简化POJO老式Java开发,实现解耦!

B. 注入的方式有很多,最常见几种注入方式【装备方式】:推荐用自动配置的机制!

C. 一个完整的注入流程:

C1. 由servlet容器(tomcat)的web.xml或者测试单元的@RunWith(SpringJunit4ClassRunner.class)创建spring容器(分为bean工厂+多种spring上下文)(常用的XmlWebApplicationContext:用于加载XML方式的bean注入和AnnotationConfigWebApplicationContext:用于javaConfig注入方式!),并通过spring容器结合配置文件创建各种各样的组件bean!多数使用上下文作为spring容器多一点!所以下方以上下文为例!

C2. 通过spring上下文对象去加载配置文件(JavaConfig的@Configuration或者XML配置都可以)

C3. spring上下文通过配置文件发现(扫描也好配置也好)了bean之后并创建bean,然后查看在哪注入,就进行组装和注入了!并创建这些组件bean之间的关联关系!

1)借助JavaConfig+@Bean完成显式注入:

a. 带有@Bean注解的方法可以采用任何必要的Java功能来产生bean实例。这种方式主要应用于注入第三方库的场景,因为我们没办法在别人的代码里面去声明一个带有我们要注解的bean!

b.这种方式直接编写一个配置类(javaConfig)@Configuration注解:表示这是一个配置类!

c.然后在这个配置类中添加方法(这个方法可以是构造方法或者是Setter方法)并带上注解@Bean!这个方法返回的是一个实例化new对象。通过这个方法返回一个对象,即可完成一次注入!

d.@Bean("id")可以给bean定义一个ID

e.bean的单例性,可将同一个bean实例注入到任意数量的其他bean中!

使用Javaconfig的时候,要创建一个带有@Configuration注解的类!

2)xml配置:

a.要创建一个XML文件,并以<beans>元素为根

b.创建<bean>元素【等同于javaConfig的@Bean注释方法!注解】

c. 填写id和class(指定到对应的java类)

a/b/c完成了一个原材料Bean的定义!

<bean id="compactDisc" class="soundsystem.SgtPeppers"/>

d. 定义另外一个<bean>配置类Bean(等同于JavaConfig配置类),然后在这个使用者中通过constructor-arg(这是)引用材料bean的id

d1.构造方式【引入ref】注入

<bean id="cdPlayer" class="soundsystem.CDPlayer"><constructor-arg ref="compactDisc" />
<bean/>

d2.构造方式字面量【value属性】注入[这里用了spring的c命名空间等同于constructor-arg]

<bean id="compactDisc">class="soundsystem.BlankDisc"c:_tittle="THIS IS TITTLE"c:_artist="ARTIST NAME"
<bean/>

这个方式注入的时候可以通过<set><list>元素注入多个参数!

e. Setter注入方式!

在使用者类没有显式的编写构造函数的时候(只有默认隐式)推荐使用此方式注入!Setter方式的注入需要在<bean>元素标签中使用<property>注入到compactDisc的compactDisc属性中(setCompactDisc()Setter方法)(如下例子):property的命名空间是p!Setter同样有ref引用方式和字面量<value>方式!

<bean id="cdPlayer" class="soundsystem.CDPlayer"><property name="compactDisc" ref="compactDisc"/>
<bean/>

3) 自动化装配bean(推荐)

A. 创建被发现扫描的bean类

@Component注解和@Named

:表明该类会作为组件,并告知spring为这个类创建bean。我们知道以上javaConfig装配或者XML装配也好都会给相关的bean命名ID。当然用@Component(id)和@Named(id)也是可以的。

B. 配置启动扫描类:

a. @Configuration+@ComponentScan注解:这个注解能在spring中启动组件扫描,默认会扫描与之同一个package包下的所有类和子包。当然这个启动扫描也可以指定到特定的包或几个包!

@Configuration的作用同上述Javaconfig方法装配bean一样表明这个类是一个配置类

b. 使用XML来启动扫描:<context:component-scan>元素

C. @Autowired完成注入:

如何加载配置:@ContextConfiguration注解—》加载刚 @Configuration+@ComponentScan注解的bean启动扫描——》扫描到同一个包下的所有@Component注解的bean!——》通过@Autowired注解在属性上完成bean的注入!

@Autowired(或者java的规范注入:@Inject)在使用类中的构造方法或者Setter方法中或者其他方法上加入@Autowired,并在方法的参数中传入要注入的bean作为参数即可完成自动装配的注入!【有点类似javaConfig方式的@Bean注解,但是有区别,@Bean是返回一个new实例,而@Autowired是通过参数传入】

4)三种装配方法对比

javaConfig方式XML方式自动化装配
配置Bean类+材料Bean类

创建一个以<beans>

元素为跟的XML文件

配置&扫描类+被发现的材料bean类

无需创建材料类bean!

创建<bean>基本材料bean,

指明ID和包名

创建一个可被发现的材料bean:

@Component注解和@Named

@Configuration注解定义一个配置类创建<bean>配置类bean!

@Configuration定义配置类且

@ComponentScan注解:启动组件扫描

或者使用XML定义扫描

<context:component-scan>

在统一个配置类中通过@Bean注解的方法

返回一个new实例完成注入

通过<constructor-arg>构造方式

和<property>的Setter方式完成注入

默认自动扫描所配置的扫描类的

同一个包下的所有包和类.最后通过

@Autowired注解的方法以

要引入的对象属性参数形式自动注入!

主要应用于注入第三方jar库的场景配置式的编程方式!推荐!

2. spring AOP面向切面编程

主要应用于日志、事务、安全等不需要参与到主业务的代码的工作,悄悄的去监督主业务的代码!

关键词:

连接点:所监控对象类的所有接口

切   点:所需要关注的特定的入口。在spring AOP中要使用AspectJ的切点表达式语言来定义切点!

execution(* concert.Performance.perform(..))

通   知:触发器

切   面:以@Aspect注解的类! 切点和通知的结合:一个切面有五个触发器:

@After/@AfterReturning/@AfterThrowing/@Around/@Before

织   入:把切面真正的启动开始执行监控工作!

引   入:给监控对象偷偷的“私自”添加新的方法而不打扰对象本身!

AOP如何跟注入的Bean配合呢?

四、spring应用于WEB(spring MVC)

由web.xml(或者其他方法)配置DispatcherServlet,当DispatcherServlet启动时,会创建spring应用上下文。这个上下文会同普通spring上下文一样去加载配置类的bean(java:@EnableWebMVC)或者XML(特殊的命名方式)。在配置类或者配置XML里要声明视图解析器、组件扫描器、静态资源处理等等。这样就和普通的spring过程一样了!有个区别是使用spitter.web包的@Controller(控制类)一系列注解代替普通的扫描注解@Component-Scan!

1. @Controller注解同@Component注解的方法一样!是为了让扫描发现自己!

2. @RequestMapping注解到控制类方法上:声明了他们所需要处理的请求

3.@RequestMapping分解级别!

4. mock Spring MVC来来模拟执行HTTP请求!从这个模拟中可以看出要不要返回视图是看请求方的意愿了!

5. JSP如何访问spring后台返回的Model数据呢?通过JSTL!

6. 接收请求的输入:@RequestParam注解获取HTTP中输入参数!如果没有对应的value值就会给定默认值!这个@RequestParam可以放在方法参数中,也可以放在方法中修饰变量!

7. RPC和URL的区别?理想情况下应该通过URL的形式发起请求,因为能完整的知道资源的路径。而如果RPC(域名地址+?参数=dd...)通过参数去访问资源就隐藏了中间的地址了!

8. 接收占位符!

9. 带有重定向式的视图:redirect:前缀!
10. 校验注解:直接通过注解去校验。而不用自己动手写校验方法!

11. 重定向:P165

12.  传递负责的数据!

五、spring所支持的业务框架

1. spring web flow:适合元素按规定的流程运行!

2. spring security:解决spring的安全:认证、拦截、过滤等等!

六、 spring ORM:Hibernate/Mybatis...

七、 spring REST API

八、 spring boot

九、spring Email

十. SSM

转载于:https://my.oschina.net/u/3697586/blog/1815327

相关文章:

电子学会青少年编程等级考试四级题目解析07

一、题目&#xff1a;数字反转 Jaime想去城堡探险&#xff0c;在城堡门口遇到了小猫&#xff0c;Jaime必须答对小猫提出的问题才能进入城堡。 小猫出题啦&#xff1a;找到一个四位数&#xff0c;该四位数的各位数字翻转&#xff08;个位变千位&#xff0c;十位变百位&#xf…

如何连接本地mysql+设置无密码登录

如果嫌麻烦&#xff0c;可以设置密码为空&#xff0c;下次登录就不需要密码了。

【GDI+】 线段 文字 定位的问题(二)

继续&#xff1a; 经过上文的分析&#xff0c;似乎可以得到类似这样的想法&#xff1a; 由此 分为左右两侧进行区分绘制&#xff0c;应该就可以获得想要的结果了~ 转载于:https://www.cnblogs.com/loveclumsybaby/p/3440314.html

电子学会青少年编程等级考试Python一级题目解析10

Python一级题目解析 1、题目 下面代码的执行结果是&#xff08;&#xff09; a 123456789 b "*" print("{0:{2}>{1},}\n{0:{2}^{1},}\n{0:{2}<{1},}".format(a,20,b))A. *********123,456,789 ****123,456,789***** 123,456,789*********B. **…

ES6基础之Array.fill函数

引子 关注「时事」的同学都会注意到&#xff0c;ES6和TypeScript是时下「投资」的热门。作为一位老同学&#xff0c;我也注意到这一点&#xff0c;不断收集一些小东东&#xff0c;以备不时之需。 正题 本文中记录的是ES6为Array增加的fill()函数。其功能是&#xff0c;用户可以…

CSP 202006-1 线性分类器 python实现+详解

试题 代码 # 读入m,n m, n [int(i) for i in input().split()]# 创建字典存放已知点 dict {} for i in range(m):line input().split()x, y, t linex, y int(x), int(y)dict[(x, y)] t# 逐条线地去判断每一个点 # 创建两个集合&#xff0c;一个存放坐标代入公式后大于零…

Java堆内存分配与回收策略

java主要在堆上分配内存&#xff0c;而Java堆又分为新生代(YoungGen)和老年代(OldGen)两个部分&#xff0c;新生代又再分为Eden区和Survivor区两部分&#xff0c;本文根据java堆的划分&#xff0c;描述hotspot的内存分配策略。 GC垃圾收集分类 Minor GC: 发生在新生代中的垃圾…

清华学长带你从宏观角度看递归

分享嘉宾 赵子一&#xff0c;Datawhale成员&#xff0c;清华大学研究生在读。 分享视频 见公众号“组队学习” 分享内容

关于loader加载的东西必须是继承sprite

如果不是继承sprite转载于:https://www.cnblogs.com/wonderKK/p/3440616.html

CSP 202006-2 稀疏向量 python实现(非满分)(待更新)

试题 代码 &#xff08;1&#xff09;30分代码 # 读取n,a,b # n表示向量u,v的维数&#xff0c;a&#xff0c;b分别表示u&#xff0c;v的非零值个数 n, a, b [int(i) for i in input().split()]# 创建两个二维队列存放u,v的信息 List1 [] List2 [] for i in range(a):line …

Java泛型总结

0. 概述 泛型是Jdk1.5引入的特性。泛型是Java程序员最常用且最容易被忽视的知识之一。许多Java程序员只是使用泛型类。但不考虑其工作方式&#xff0c;直到出现问题。 1 术语 用示例进行描述。ArrayList<E>类、ArrayList<Integer>类&#xff1a; 整个称为ArrayLi…

首例利用智能路由网关犯罪嫌疑人被捕:罪名流量劫持

首例利用智能路由网关犯罪嫌疑人被捕:罪名流量劫持 https://tech.sina.cn/digi/nb/2018-05-15/detail-ihapkuvm0295695.d.html 上海市徐汇区人民检察院依法以破坏计算机信息系统罪对全市首例利用智能路由网关设备进行流量劫持的犯罪嫌疑人章某批准逮捕。 经查&#xff0c;2018年…

电子学会青少年编程等级考试Python案例10

案例&#xff1a;彩虹 1、作品 2、代码 背景图片&#xff1a;蓝天白云.png import turtleturtle.Screen().setup(803, 648) turtle.Screen().bgpic("./蓝天白云.png")pen turtle.Pen() pen.speed(10) r 330 size 10 colors [#ff0000, #ff7f00, #ffff00, #00ff0…

CSP 201912-2 回收站选址 python实现+详解

试题 代码 # 读入点的个数 n int(input())# 创建字典&#xff0c;键为点的坐标&#xff0c;值为true&#xff0c;存放所有点 dict {} for i in range(n):x, y [int(m) for m in input().split()]dict[(x, y)] true# 创建字典&#xff0c;存放是回收站的点 dict1 {} for k…

web.xml 配置 加载顺序

web.xml 的加载顺序是&#xff1a;context-param -> listener -> filter -> servlet 。 过滤器执行顺序是根据filter-mapping &#xff0c;不是根据filter顺序。转载于:https://www.cnblogs.com/xiongjinpeng/p/web-xml%e9%85%8d%e7%bd%ae%e5%8a%a0%e8%bd%bd%e9%a1%ba…

python包引用问题

python模块引用梳理 文件组织结构&#xff1a; 复制代码t├── __init__.py├── main.py├── t1│ ├── A.py│ └── __init__.py└── t2 ├── B.py └── __init__.py 复制代码A.py def test(): print t.t1.A.test()B.py def test(): print t.t2.B.test()执行&a…

【新周报(051)】Datawhale组队学习

记录&#xff1a; 按照本周规划&#xff0c;我们正在与阿里云天池合作开展“在线编程训练营”的组队学习活动&#xff0c;在这次活动中我们已经完成12个知识点&#xff08;数组、链表、栈、字符串、树、位运算、双指针、搜索、排序、动态规划、分治、哈希表&#xff09;的视频…

ZJU-java进阶笔记 第一、二周(类与对象,对象交互)

对象变量是对象的管理者&#xff0c;而非所有者 VendingMachine vm new VendingMachine();this指代当前对象 成员函数可以直接&#xff08;不需要点运算符&#xff09;调用本类的其他成员函数 void insertMoney(int amount) {balance balance amount;showBalance(); }定义…

常用的文本处理函数

函数说明left()返回串左边的字符length()返回串的长度locate()找出串的一个子串lower()将串转换成小写upper()将串转换成大写ltrim()去掉串左边空格rtrim()去掉串右边空格substring()返回子串的字符转载于:https://www.cnblogs.com/forphp/p/3442568.html

【青少年编程竞赛交流】02月份微信图文索引

02月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习&#xff0c;所以&#xff0c;我另外新建了这个微信公众号“青少年编程竞赛交流”&#xff0c;在这个公众号上分享有关青少年编程方面的知识&#xff0c;带小朋友们参…

js ~取非运算符的妙用,将-1转为0(或假值)

典型的运用场景就是indexOf

CSP 201912-1 报数 python实现

试题 代码 python n int(input())list [0, 0, 0, 0] m 0 i 1while(i < (mn)):if 7 in str(i) or i % 7 0:list[(i3) % 4] 1m 1i 1for j in list:print(j)

暴裂无声张一鸣

2009年&#xff0c;张一鸣第一次创业&#xff0c;项目名为九九房。最巅峰时&#xff0c;九九房的用户超过600万&#xff0c;移动产品用户量超过100万&#xff0c;日启动10万人次。如果这一项目成功地做下去&#xff0c;张一鸣很有可能成为一名地产大佬。可惜的是&#xff0c;张…

select 不要 用*

背景 说实在的&#xff0c;这有什么好记录的呢。记录这个有啥用&#xff0c;真是技术人员的吹毛求疵。说起来&#xff0c;就是给人装有用吧。既然记录了&#xff0c;也想个相关的段子吧。曾经有个同事写了个sql&#xff0c;效率极差&#xff0c;来了个女同事&#xff0c;竟然解…

【青少年编程竞赛交流】01月份微信图文索引

01月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习&#xff0c;所以&#xff0c;我另外新建了这个微信公众号“青少年编程竞赛交流”&#xff0c;在这个公众号上分享有关青少年编程方面的知识&#xff0c;带小朋友们参…

CSP 201812-1 小明上学 Python实现+详解

题目 代码 #红灯 r 秒&#xff0c;黄灯 y 秒&#xff0c;绿灯 g 秒 r,y,g [int(i) for i in input().split()]#n表示小明总共经过的道路段数和看到的红绿灯数目 n int(input())#0-道路 #1-红灯 需要等r(所读值取代)秒 #2-黄灯 需要等yr(所读值取代)秒(黄灯亮后亮红灯) #3-绿…

Debain 7.2安装配置

一 下载安装Debian 7.2 安装debian CD1,在最后一步&#xff0c;使用网络安装基本界面。 二 修改源 cd /etc/apt mv sources.list sources.list.bak gedit /sources.list 添加&#xff1a; #####################主要&#xff0c;开源&#xff0c;闭源 deb http://mirrors.163.c…

腾讯云与每日优鲜便利购战略签约 引领无人零售2.0时代发展

5月23日-24日&#xff0c;2018腾讯云未来峰会在广州保利世贸博览馆举行&#xff0c;在互联网专场上&#xff0c;腾讯云与每日优鲜便利购签订战略合作协议。双方表示&#xff0c;将充分融合每日优鲜便利购的建筑物级零售价值与腾讯云在云计算、大数据及AI技术的优势&#xff0c;…

青少年编程竞赛交流群第048次活动录播

背景介绍 把电子学会的青少年编程能力等级测评作为游戏的关卡&#xff0c;带着小朋友们升级打怪&#xff0c;这个想法来自于 我从邵慧宁身上得到的启发。 升级打怪&#xff1a; 电子学会考评中心&#xff1a;http://www.qceit.org.cn/bos/default.html 知识内容&#xff1a…

ZJU-java进阶笔记 第三周(对象容器)

ArrayList<String> 读作 ArrayList of String 用来存放String的ArrayList ArrayList类属于范型类&#xff0c;是种容器 ArrayList<String>类属于容器类&#xff0c;用来存放对象&#xff0c;由容器类型和元素类型构成 知道容器类的一些内置用法&#xff0c;省很多事…