依赖 netty spring_十分钟带你了解Spring的七大知识点,程序员必了解
Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。
很多研发人员把spring看作心目中最好的java项目,没有之一。
所以这是重点也是难点,工作中必须会,面试时肯定考。
那么,今天花费10分钟,梳理Spring框架相关知识。
一、Spring知识点-汇总
spring系列包含非常多的项目,可以满足java开发中的方方面面。
先来看常用框架的知识点汇总,如图:
蚂蚁课堂带你学java
5个常用的spring框架
1.spring framework
也就是我们经常说的spring框架,包括了ioc依赖注入,Context上下文、bean管理、springmvc等众多功能模块,其它spring项目比如spring boot也会依赖spring框架。
2.spring boot
它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。
Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。
3.Spring Data
是一个数据访问及操作的工具集,封装了多种数据源的操作能力,包括:jdbc、Redis、MongoDB等。
4.Spring Cloud
是一套完整的微服务解决方案,是一系列不同功能的微服务框架的集合。Spring Cloud基于Spring Boot,简化了分布式系统的开发,集成了服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等各种服务治理能力。比如sleuth提供了全链路追踪能力,Netflix套件提供了hystrix熔断器、zuul网关等众多的治理组件。config组件提供了动态配置能力,bus组件支持使用RabbitMQ、kafka、Activemq等消息队列,实现分布式服务之间的事件通信。
5. Spring Security
主要用于快速构建安全的应用程序和服务,在Spring Boot和Spring Security OAuth2的基础上,可以快速实现常见安全模型,如单点登录,令牌中继和令牌交换。你可以了解一下oauth2授权机制和jwt认证方式。oauth2是一种授权机制,规定了完备的授权、认证流程。JWT全称是JSON Web Token,是一种把认证信息包含在token中的认证实现,oauth2授权机制中就可以应用jwt来作为认证的具体实现方法。
Struts的具体作用
struts是曾经非常火爆的web组合ssh中的控制层。我们知道web服务一般都采用MVC分层模型构建,就是model层负责内部数据模型,controller负责请求的分发控制,view层负责返回给用户展示的视图。struts实现的就是其中控制层的角色。
Struts采用Filter实现,针对类进行拦截,每次请求就会创建一个Action。使用struts的SSH组合已经逐渐被使用springMVC的SSM组合代替,也就是Spring-MVC+Spring+MyBatis的组合,一方面原因是由于struts对几次安全漏洞的处理,让大家对struts的信心受到影响;另一方面,springmvc更加的灵活,不需要额外配置,不存在和spring整合等问题,使用更加方便,所以建议以SSM框架的学习为主。
常用的ORM框架
ORM就是对象关系匹配,是为了解决面向对象与关系数据库存在的互不匹配的问题。简单来说,就是把关系数据库中的数据转换成面向对象程序中的对象。
常用的ORM框架有Hibernate和MyBatis,也就是ssh组合和ssm组合中的h与m。
它们的特点和区别如下:
Hibernate对数据库结构提供了完整的封装,实现了POJO对象与数据库表之间的映射,能够自动生成并执行SQL语句。只要定义了POJO 到数据库表的映射关系,就可以通过Hibernate提供的方法完成数据库操作。Hibernate符合JPA规范,就是Java持久层API。
mybatis通过映射配置文件,将SQL所需的参数和返回的结果字段映射到指定对象,mybatis不会自动生成sql,需要自己定义sql语句,不过更方便对sql语句进行优化。
总结起来:
- hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。mybatis,简单、高效、灵活,但是需要自己维护sql;
- hibernate功能强大、全自动、适配不同数据库,但是非常复杂,灵活性稍差。
Netty简介
Netty是一个高性能的异步事件驱动的网络通信框架,Netty对JDK原生NIO进行封装,简化了网络服务的开发。下文会详细讲解
另外,同类型的框架还有mina、grizzly,不过目前使用的相对较少,一般不会在面试中出现,可以作为兴趣简单了解。
RPC服务
Motan、Dubbo、gRPC都是比较常用的高性能rpc框架,可以提供完善的服务治理能力,java版本的通信层都是基于前面提到的Netty实现。它们的特点稍后介绍。
其他常用框架
jersy和restEasy都是可以快速开发restful服务的框架。
和springmvc相比,这两个框架都是基于jax-rs标准,而springmvcs基于servlet,使用自己构建的API,是两个不同的标准。
shiro框架是一个与spring security类似的开源的权限管理框架,用于访问授权、认证、加密及会话管理。能够支持单机与分布式session管理。
相比security,shiro更加简单易用。
二、Spring知识点-详解
spring中的几个重要概念如下:
1.IOC
IOC,就是控制反转,如最左边,拿公司招聘岗位来举例:
假设一个公司有产品、研发、测试等岗位。如果是公司根据岗位要求,逐个安排人选,如图中向下的箭头,这是正向流程。如果反过来,不用公司来安排候选人,而是由第三方猎头来匹配岗位和候选人,然后进行推荐,如图中向上的箭头,这就是控制反转。
在spring中,对象的属性是由对象自己创建的,就是正向流程;如果属性不是对象创建,而是由spring来自动进行装配,就是控制反转。这里的DI也就是依赖注入,就是实现控制反转的方式。正向流程导致了对象于对象之间的高耦合,IOC可以解决对象耦合的问题,有利于功能的复用,能够使程序的结构变得非常灵活。
2.context上下文和bean
spring进行IOC实现时使用的有两个概念:context上下文和bean。
如中间图所示,所有被spring管理的、由spring创建的、用于依赖注入的对象,就叫做一个bean。Spring创建并完成依赖注入后,所有bean统一放在一个叫做context的上下文中进行管理。
3.AOP
AOP就是面向切面编程。如右面的图,一般程序执行流程是从controller层调用service层、然后service层调用DAO层访问数据,最后在逐层返回结果。
这个是图中向下箭头所示的按程序执行顺序的纵向处理。但是,一个系统中会有多个不同的服务,例如用户服务、商品信息服务等等,每个服务的controller层都需要验证参数,都需要处理异常,如果按照图中红色的部分,对不同服务的纵向处理流程进行横切,在每个切面上完成通用的功能,例如身份认证、验证参数、处理异常等等、这样就不用在每个服务中都写相同的逻辑了,这就是AOP思想解决的问题。
AOP以功能进行划分,对服务顺序执行流程中的不同位置进行横切,完成各服务共同需要实现的功能。
spring应用相关
蚂蚁课堂带你学java
1.常用注释
a.类型类注释:
类型类注释包括controller、service等,需要重点了解
其中component和bean注解的区别如下:
- @Component注解在类上使用表明这个类是个组件类,需要Spring为这个类创建bean。
- @Bean注解使用在方法上,告诉Spring这个方法将会返回一个Bean对象,需要把返回的对象注册到Spring的应用上下文中。
b.设置类注解
重点了解@Autowire和@Qualifier以及bytype、byname等不同的自动装配机制。
c.web类注解
主要以了解为主,关注@RequestMapping、@GetMapping、@PostMapping等路径匹配注解,以及@PathVariable、@RequestParam 等参数获取注解。
d.功能类注解
包括@ImportResource引用配置、@ComponentScan注解自动扫描、@Transactional事务注解等等,这里不一一介绍了。
2.配置方式
需要了解配置spring的几种方式,xml文件配置、注解配置和使用api进行配置。
自动装配机制需要了解按类型匹配进行自动装配,按bean名称进行自动装配,构造器中的自动装配和自动检测等主要的四种方式。
还需要了解一下list、set、map等集合类属性的配置方式以及内部bean的使用。
Spring中bean的生命周期
第1步:调用bean的构造方法创建bean;
第2步:通过反射调用setter方法进行属性的依赖注入;
第3步:如果实现BeanNameAware接口的话,会设置bean的name;
第4步:如果实现了BeanFactoryAware,会把bean factory设置给bean;
第5步:如果实现了ApplicationContextAware,会给bean设置ApplictionContext;
第6步:如果实现了BeanPostProcessor接口,则执行前置处理方法;
第7步:实现了InitializingBean接口的话,执行afterPropertiesSet方法;
第8步:执行自定义的init方法;
第9步:执行BeanPostProcessor接口的后置处理方法。
这时,就完成了bean的创建过程。
Spring扩展接口
对spring进行定制化功能扩展时,可以选择如下一些扩展点:
1.BeanFactoryPostProcessor
是beanFactory后置处理器,支持在bean factory标准初始化完成后,对bean factory进行一些额外处理。在讲context初始化流程时介绍过,这时所有的bean的描述信息已经加载完毕,但是还没有进行bean初始化。例如前面提到的PropertyPlaceholderConfigurer,就是在这个扩展点上对bean属性中的占位符进行替换。
2.BeanDefinitionRegistryPostProcessor
它扩展自BeanFactoryPostProcessor,在执行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允许在初始化一般bean前,注册额外的bean。例如可以在这里根据bean的scope创建一个新的代理bean。
3.BeanPostProcessor
提供了在bean初始化之前和之后插入自定义逻辑的能力。与BeanFactoryPostProcessor的区别是处理的对象不同,BeanFactoryPostProcessor是对beanfactory进行处理,BeanPostProcessor是对bean进行处理。
4.ApplicationContextAware
可以获得ApplicationContext及其中的bean,当需要在代码中动态获取bean时,可以通过实现这个接口来实现。
5.InitializingBean
可以在bean初始化完成,所有属性设置完成后执行特定逻辑,例如对自动装配对属性进行验证等等。
6.DisposableBean
用于在bean被销毁前执行特定的逻辑,例如做一些回收工作等。
7.ApplicationListener
用来监听spring的标准应用事件或者自定义事件。
springboot相关的知识点
1.启动流程
主要步骤首先要配置environment,然后准备context上下文,包括执行applicationContext的后置处理、初始化initializer、通知listener处理contextPrepared和contextLoaded事件。最后执行refreshContext,也就是前面介绍过的AbstractApplicationContext类的refresh方法。
2.配置文件
然后要知道在Spring Boot中有两种上下文,一种是bootstrap, 另外一种是application。
bootstrap是应用程序的父上下文,也就是说bootstrap会先于applicaton加载。bootstrap主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。bootstrap里面的属性会优先加载,默认也不能被本地相同配置覆盖。
3.注解
@SpringBootApplication包含了@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration三个注解
而@SpringBootConfiguration注解包含了@Configuration注解。也就是springboot的自动配置功能。
@Conditional注解就是控制自动配置的生效条件的注解,例如bean或class存在、不存在时进行配置,当满足条件时进行配置等等。
4.特色模块
- starter是springboot提供的无缝集成功能的一种方式,使用某个功能时开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动配置进行bean的创建。例如需要使用web功能时,只需要在依赖中引入spring-boot-starter-web即可。
- actuator是用来对应用程序进行监视和管理,通过restful api请求来监管、审计、收集应用的运行情况。
- devtools提供了一系列开发工具的支持,来提高开发效率。例如热部署能力等。
- CLI就是命令行接口,是一个命令行工具,支持使用Groovy脚本,可以快速搭建spring原型项目。
以上为Spring框架需要掌握的内容,前面提到的核心机制、核心流程,建议阅读源码加深理解。
写在最后
免费的java资料需要的自己领取哦。
关注小编哦
依赖 netty spring_十分钟带你了解Spring的七大知识点,程序员必了解相关推荐
- 十分钟带你理解Kubernetes核心概念
原文地址:http://www.dockone.io/article/932 十分钟带你理解Kubernetes核心概念 本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubern ...
- 十分钟带你打造unity3d第一人称射击
那抱歉,上次那个Unity+kinect还没有更新,最近在深一步研究,不久将更新(绝对不负众望)!现在进入正题,十分钟带你打造unity3D第一人称射击游戏! 看完本篇博客,你将学会第一人称控制,粒子 ...
- java软件学习网站_Java程序员必看的十大学习网站
无论是作为资深Java程序员,还是刚刚Java入门的小白,都不可缺少平时学习的网站.以下小编收集了Java程序员必看的十大学习网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题.面试 ...
- 一线程序员带你实践学习企业实战C/C++程序员课程
作者吴从周 资源简介: 传统的C/C++的教材和课程都属于学院派,只是单纯的讲一些知识点,却没有讲到实际开发中我们常用的知识点有哪些,本课程将打破传统的弊端,一线程序员将带你实践学习企业实战项目中LI ...
- 简单易懂!十分钟带你了解:统计学到底是干什么的
CDA数据分析师 出品 编译:Mika [导读] 统计学在我们的日常生活中无处不在,它有助于我们更好地了解世界,并做出更好的决策. 在今天的内容里,我们将带你用十分钟了解:统计学到底是关于什么的一门学 ...
- 这是我见过最好的Python教程:十分钟带你认识Python
这篇文章主要介绍了简洁的十分钟Python入门教程,Python语言本身的简洁也使得网络上各种Python快门入门教程有着很高的人气,本文是国内此类其中的一篇,需要的朋友可以参考下 [简介] Pyth ...
- 十分钟就能回顾Spring常问的知识点,带你突击面试没问题!
前言 作为一个写Java的程序员,应该不太可能没听过Spring.对开发者来说,Spring就像是哆啦A梦的口袋.无论需要什么道具,都可以从口袋里直接拿出来,而不用关心这些道具来自哪里. 本篇主要记录 ...
- 十分钟带你入门Nodejs
前言: 我们去学习一样东西时,一定不可盲目去摸索,必须得有目标,学完之后,应该是知其然,知其所以然.ok话不多说,进入今天的主题. 学习nodejs需要掌握的前置知识:html css java ...
- DNSPod十问沈添:低代码将让程序员集体失业?
问答时间:2021年7月20日 嘉宾简介:沈添,亿众骏达联合创始人&友好速搭事业部总经理,前网易邮箱工程师,资深站长,低代码技术专家,助力企业在DTC业态创下超过100亿零售增量. 主持人简介 ...
最新文章
- offsetof使用小结
- VMware 12.0 在安装的时候出现 microsoft runtime dll
- linux内核地址映射,Linux内核设备驱动地址映射笔记整理
- caffe特征提取/C++数据格式转换
- 【转载】我目瞪口呆地望着即时通讯
- java code_Alibaba Java Code Guidelines 插件使用教程
- linux mkfifo管道
- win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法
- 请说明指令周期、机器周期、时钟周期之间的关系。
- 【渝粤题库】 广东开放大学 劳动和社会保障法 形成性考核
- commons-logging slf4j log4j 区别
- *第十三周*数据结构实践项目二【验证Kruskal算法】
- 【java】爬虫之零基础利用postman分析并实现12306余票查询功能
- 博弈论入门——威佐夫博弈
- 【转】英语词汇学习渐进
- 计算机控制环境下审计风险研究,计算机审计风险研究
- win10系统激活提示无法连接到你组织的激活服务器如何解决
- LeetCode#860: 柠檬水找零
- 自定义下拉回弹View-掌握View冲突处理
- matlab中求矩阵A的特征向量,matlab层次分析法求特征值及特征向量.doc
热门文章
- 08服务器许可证安装向导,08_安装部署GRID许可证服务器.pdf
- java map用二叉树_【课堂笔记分享】linkedlist、二叉树、hashmap
- interp1函数matlab_【原创】干货:用MATLAB搭建电化学单粒子模型(中)
- qt将光标相对于桌面的位置转换为相对于窗口的位置
- CTF-MISC杂项题2
- 联想超融合平台oracle,联想AIO超融合云一体机解决方案.pdf
- php阿拉伯语字符串,按字母顺序命名阿拉伯语名称Mysql和php
- 中山大学计算机类专业分数线,中山大学计算机类专业2016年在广东理科高考录取最低分数线...
- java java.doc_使用 javadoc 自动生成 Java 文档
- linux php和java环境变量配置_Linux下配置Java环境变量