什么是Spring:spring是个开源框架,spring mvc是基于spring的一个mvc框架,spring boot是基于spring4的条件注册的一套快速开发整合包。

Spring两大特征:1)AOP面向切面编程;2)DI依赖注入

SpringAOP使用哪些类型通知:1)before。2)after。3)after-returning。4)after-throwing。5)around

1 spring bean

什么是Spring beans:是java对象,他们被Spring IOC容器初始化,装配和管理,这些beans通过容器中配置的元数据创建。比如xml中<bean/>(被SpringBoot中注解@Configuration替代)

一个SpringBean定义包含什么:包含Spring容器必知的所有配置元数据,包括如何创建一个bean,生命周期,以及依赖。

如何给spring容器配置元数据:1)XML配置文件<bean\>。2)基于注解的配置@Configuration。3)基于java的配置。

作用域有哪些:有5种作用域。1)singleton单例 缺省作用域,只有一个实例。2)prototype原型,有多个实例。3)request。4)session。5)global session

SpringBean如何加载:

  第一步:Spring容器 从XML 文件中读取bean的定义或者通过注解@Configuration找到注解类,并实例化bean。

  第二步:Spring容器根据bean的定义填充属性。

  第三步:检查aware相关接口,并设置属性。如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。

  第四步:BeanPostProcessors前置处理。如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。

  第五步:检查是否有IntializingBean,并决定是否调用afterPropertySet。如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。

  第六步:BeanPostProcessors后置处理。如果有任何与bean相关联的BeanPostProcessors,这些bean的postProcessAfterInitialization() 方法将被调用。

  第七步:注册destruction相关回调接口

  第八步:如果bean实现了 DisposableBean,它将调用destroy()方法。

2 spring mvc

什么是Spring的MVC框架核心:围绕DispatcherServlet来设计,它用来处理所有的http请求和响应。

SpringMVC核心注解:

  @Controller:表明该类扮演控制器的角色,spring不需要你继承任何其他控制器基类或引用Servlet API。

  @RequestMappiong:该注解用来映射一个URL到一个类或一个特定的处理方法上。

3 spring boot

什么是Spring Boot:是Spring开源组织下的一个子项目,提供一站式解决方案,节省了配置,提供了各种启动器。

项目中使用了哪些启动器:基本启动器有44种

  spring-boot-starter-jdbc 支持JDBC数据库;

  spring-boot-starter-redis 支持Redis键值存储数据库,包括spring-redis,然后在application.yml文件中配置redis连接池。

  spring-boot-starter-security 支持spring-security。

  spring-boot-starter-test 支持常规的测试依赖,包括JUnit、Hamcrest、Mockito以及spring-test模块。

  spring-boot-starter-web 支持全栈式Web开发,包括Tomcat和spring-webmvc。(提供了SpringMVC的支持)

为什么要用Spring Boot:因为自动配置,即约定优于配置。

如何实现自动配置(SpringBoot原理):

  第一步:将启动器starter配置到maven依赖中。

  第二步:SpringBoot启动的时候,会去依赖的starter包中resources/META-INF/spring.factories文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包。

  第三步:根据 spring.factories配置加载AutoConfigure类。

  第四步:根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。

为什么是自动配置:因为它有个注解为EnableAutoConfiguration,这个注解被包含在SpringBootApplication注解中,他能够根据类路径下的jar包和配置动态加载配置和注入bean。

怎么理解约定优于配置:

SpringBoot核心配置文件:

  bootstrap(.yml/properties)和application(.yml/properties) 

  bootstrap 由父 ApplicationContext 加载,比 applicaton 优先加载,bootstrap 里面的属性不能被覆盖。

  application 配置文件主要用于 Spring Boot 项目的自动化配置

SpringBoot核心几个注解:

  @Configuration,可以通过这注解所在类进行注册。这是个Spring 3.0添加的一个注解,用来代替applicationContext.xml配置文件。 相关注解@Bean:用来代替xml配置文件里面的<bean..>配置

  @ComponentScan:开启组件扫描,即自动扫描包路径下的@Component注解,进行注册bean实例到context中。这个是Spring 3.1添加的一个注解,用来代替配置文件中的component-scan配置。可重复注解,用来配置注册不同的子包。

  @EnableAutoConfiguration:用来提供自动配置。

4 spring cloud

什么是SpringCloud:是一系列框架的有序集合,也就是一系列的分布式解决方案包。Spring并没有重复制造轮子,只是将各家公司开发的比较成熟的经得起考验的服务框架组合起来,通过SpringBoot风格进行再封装,最终提供一套简单易部署和易维护的分布式系统开发工具包。

为什么使用SpringCloud:需要从微服务说起,微服务是根据业务拆分的一个个独立的服务,并且强调DevOps(Development和Operational)开发测试运维进行一体化的合作,应对更小,更频繁更自动化的应用发布。

SpringCloud使用了哪些组件:

  1)服务注册和发现SpringCloudNetflixEureka

  2)服务调用方式REST API

  3)服务网关SpringCloudNetflixZuul

  4)断路器SpringCloudNetflixHystrix

  5)分布式配置SpringCloudConfig

  6)消息总线SpringCloudBus

SpringCloud如何实现注册中心:

  1)引入SpringCloud依赖spring-cloud-dependencies

  2)引入EurekaServer依赖spring-cloud-starter-eureka-server

  3)添加启动类,开启EurekaServer功能(在main方法所在类上增加注解@EnableEurekaServer,来标识这是一个ES服务

   微服务提供者即开启EurekaClient,在main方法所在类上增加注解@EnableDiscoveryClient

   微服务消费者

  4)添加Eureka配置(application.yml)配置多台注册中心,每个注册中心都向别的注册中心注册自己。

  5)MavenFilter配置,由maven resource filter打包控制。

  

Spring是什么 包括SpringBean SpringMVC SpringBoot SpringCloud的更多相关文章

  1. spring springMvc spring-boot spring-cloud分别是什么

    本文来源于:克己习礼成仁   的<spring springMvc spring-boot spring-cloud分别是什么> 什么是spring 关于spring的定义无论是从官方还是 ...

  2. Spring SpringMVC SpringBoot SpringCloud 注解整理大全

    Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...

  3. Spring SpringMVC SpringBoot SpringCloud概念、关系及区别

    一.正面解读: Spring主要是基于IOC反转Beans管理Bean类,主要依存于SSH框架(Struts+Spring+Hibernate)这个MVC框架,所以定位很明确,Struts主要负责表示 ...

  4. 【微服务系列】Spring SpringMVC SpringBoot SpringCloud概念、关系及区别

    一.正面解读 Spring主要是基于IOC反转Beans管理Bean类,主要依存于SSH框架(Struts+Spring+Hibernate)这个MVC框架,所以定位很明确,Struts主要负责表示层 ...

  5. springmvc springboot 跨域问题(CORS)

    官方文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cors.html springmvc s ...

  6. SSM - SpringBoot - SpringCloud

    SSM框架 Spring + Spring MVC + MyBatis:标准MVC模式 继 SSH (Struts+Spring+Hibernate)之后,主流的 Java EE企业级 Web应用程序 ...

  7. Spring AOP实战例子与springmvc整合不起效果的解决办法

    在使用AOP之前,首先我们先了解一下什么是AOP吧.在网上很多人将AOP翻译为“面向切面编程”,什么是面向切面?与面向对象有什么区别呢? 在回答这两个问题之前,我们先要明白切面的概念. 切面由切点与增 ...

  8. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  9. springBoot+springCloud学习笔记

    尊重原创:https://www.jianshu.com/p/492dfefa2735 SpringBoot 配置优先级 在命令行中传入的参数 如:java -jar storeMs.jar --se ...

随机推荐

  1. Lerning Entity Framework 6 ------ A demo of using Entity framework with MySql

    Create a new project named MySqlTest Install following packages by right-clicking on the References ...

  2. jQuery基础(4)- 位置信息、事件流、事件对象、事件代理、jquery事件

    一.jQuery的位置信息 jQuery的位置信是JS的client系列.offset系列.scroll系列封装好的一些简便api. 1.宽度和高度 a.获取宽度和高度,例如: .width() // ...

  3. 【Anaconda】:科学计算的Python发行版

    [背景] Python易用,但包管理和Python不同版本的问题比较头疼,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.Anaconda等, ...

  4. centos7 初始化脚本

    #!/bin/bash # 时间: 2018-11-21 # 作者: HuYuan # 描述: CentOS 7 初始化脚本 # 加载配置文件 if [ -n "${1}" ];t ...

  5. 以太坊ERC20代币合约案例

    一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法.如图: 二.ERC20合约标准 [官方链接] co ...

  6. 一眼看穿flatMap和map的区别

    背景 map和flatmap,从字面意思或者官网介绍,可能会给一些人在理解上造成困扰[包括本人],所以今天专门花时间来分析,现整理如下: 首先做一下名词解释---------------------- ...

  7. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  8. Linux下升级Python到3.5.2版本

    原文出处:https://www.cnblogs.com/tssc/p/7762998.html 本文主要介绍在Linux(CentOS)下将Python的版本升级为3.5.2的方法 众所周知,在20 ...

  9. mac mysql5.5升级5.7记录

    先删除当前的mysql文件 打开终端窗口 使用mysqldump备份你的数据库将文本文件! 停止数据库服务器 sudo rm /usr/local/mysql sudo rm -rf /usr/loc ...

  10. docker 非root用户修改mount到容器的文件出现“Operation not permitted

    使用环境centos7 x86-64 内核版本4.19.9 docker使用非root用户启动,daemon.json配置文件内容如下: # cat daemon.json { "usern ...