spring框架

HATEOAS约束

天大地大妈咪最大 提交于 2020-03-23 03:34:11
HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,使得客户端可以更加智能和自适应,而 REST 服务本身的演化和更新也变得更加容易。 在介绍 HATEOAS 之前,先介绍一下 Richardson 提出的 REST 成熟度模型。该模型把 REST 服务按照成熟度划分成 4 个层次: 第一个层次(Level 0)的 Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式。SOAP 和 XML-RPC 都属于此类。 第二个层次(Level 1)的 Web 服务引入了资源的概念。每个资源有对应的标识符和表达。 第三个层次(Level 2)的 Web 服务使用不同的 HTTP 方法来进行不同的操作,并且使用 HTTP 状态码来表示不同的结果。如 HTTP GET 方法来获取资源,HTTP DELETE 方法来删除资源。 第四个层次(Level 3)的 Web 服务使用 HATEOAS。在资源的表达中包含了链接信息。客户端可以根据链接来发现可以执行的动作。 从上述 REST 成熟度模型中可以看到,使用 HATEOAS 的 REST 服务是成熟度最高的,也是推荐的做法

spring源码学习之:xml配置文件标签自定义

旧城冷巷雨未停 提交于 2020-03-23 03:15:15
Spring框架从2.0版本开始,提供了基于Schema风格的XML扩展机制,允许开发者扩展最基本的spring配置文件(一 般是classpath下的spring.xml)。试想一下,如果我们直接在spring.xml中加入一个自定义标签<mytag id="aty"></matag>,会发生什么呢?spring框架启动的时候会报错,因为spring根本不认识我们自定义的& lt;mytag>,这样对spring.xml的校验就会失败,最终结果就是框架不能启动。有什么方法,能够让spring认识并加载解析我们自 定义的<mytag>呢?这就是spring提供的xml扩展机制。我们可以在spring.xml中加入自己的标签,之后spring会帮 我们解析并纳入自己的管理范围内,这也就是说我们扩展了spring的功能。 现在我们来看下怎么实现这个功能,可以参考spring帮助文档中的extensible-xml.html。我们知道如果在需要在spring.xml中配置数据源,需要进行如下的配置: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property

dubbo 搭建开发环境

拥有回忆 提交于 2020-03-22 15:08:08
本文是基于 maven的,预先使用,先装 maven。 d ubbo是一个分布式服务框架,提供一个 SOA的解决方案。简单的说, dubbo就像在生产者和消费者中间架起了一座桥梁,使之能透明交互。 本文旨在搭建一个可供使用和 测试 的 dubbo环境,使用了 spring 框架;使用了 zookeeper和 dubbo服务。 准备: zookeeper:直接去官方网站下载即可,下载后解压,不需要改任何配置即可使用。 dubbo:直接去阿里巴巴下载即可,下载后解压并放到 tomcat的 webapps目录下,修改 WEB-INF/dubbo.properties中属性如下: #zookeeper的地址和端口 dubbo.registry.address=zookeeper://127.0.0.1:2181 #登录 dubbo管理页面时的 root用户和 guest用户的密码 dubbo.admin.root.password=root dubbo.admin.guest.password=guest 代码: 如果你清楚生产者 -消费者模型,那么将会很容易理解 dubbo的使用步骤。 一个生产者 -消费者模型的代码实现需要 3部分:生产者代码,消费者代码,中间接口。 中间接口 :创建一个 mavan项目,然后添加一个接口如下: publicinterface ITest {

Spring的概况

余生长醉 提交于 2020-03-22 07:45:47
----------------siwuxie095 Spring 的简介 Spring 是一个轻量级 控制反转(IoC) 和 面向切面(AOP) 的容器框架 兴起于 2003 年,它是为了解决企业应用开发的复杂性而诞生的,框架的 主要优势之一就是其分层结构,分层结构允许使用者选择使用哪一个组件, 同时为 J2EE 开发提供集成的框架 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 所能完成的事情 Spring 的用途不仅仅局限于服务器端的开发,从简单性、可测试性和松耦 合性的角度而言,任何的 Java 应用都可以从 Spring 中受益 简单来说:Spring 是一个分层的一站式的轻量级的开源框架 ( 1 )目的:解决企业应用开发的复杂性 ( 2 )功能:使用基本的 JavaBean 代替 EJB ( 3 )范围:任何 Java 应用 JavaBean 必须符合的约定: JavaBean 必须要有一个公共的默认构造函数(无参) JavaBean 的所有属性必须通过 getter 和 setter 方法进行访问 JavaBean 必须都是可序列化的(实现 java.io.Serializable 接口) 参考链接: 参考链接1 , 参考链接2 , 参考链接3 , 参考链接4 , 参考链接5 , 参考链接6 Spring 的起源 Spring

springcloud(一)-初识

戏子无情 提交于 2020-03-22 03:18:59
springCloud简介   尽管springCloud带有“cloud”字样,但它并不是云计算解决方案,而是在SpringBoot基础上构建的,用于快速构建分布式系统的通用的工具集。从技术架构上降低了对大型系统构建的要求,使我们以非常低的成本(技术或者硬件)搭建一套高效、分布式、容错的平台,但Spring Cloud也不是没有缺点,小型独立的项目不适合使用,另外对分布式事务的支持暂时也没有。 springcloud特点   上面我们说了,springCloud是基于springboot开发的,那么springboot拥有的特点,springcloud也都有: 约定优于配置。 适用于各种环境。开发,部署在PC server或各种云环境(例如阿里云,AWS等)均可。 隐藏了组件的复杂性,并提供声明式,无XML的配置方式。 开箱即用,快速启动。 轻量级的组件。springcloud整合的组件大多比较轻量,例如Eureka,zuul,等等。都是各自领域轻量级的实现。 组件丰富,功能齐全。spring cloud为微服务架构提供了非常完整的支持,例如配置管理,服务发现,断路器,微服务网关等。 选型中立,丰富。例如:spring cloud支持使用Eureka,Zookeeper或Consul实现服务发现。 灵活。spring cloud的组成部分是解耦的,开发人员可按需灵活挑选技术选型。

Spring扩展:替换IOC容器中的Bean组件 -- @Replace注解

痴心易碎 提交于 2020-03-22 02:13:39
1、背景: 工作中是否有这样的场景?一个软件系统会同时有多个不同版本部署,比如我现在做的IM系统,同时又作为公司的技术输出给其他银行,不同的银行有自己的业务实现(比如登陆验证、用户信息查询等); 又或者你的工程里依赖了公司的二方包A,A又依赖了B...这些jar包里的组件都是通过Spring容器来管理的,如果你想改B中某个类的逻辑,但是又不可能让架构组的人帮你打一份特殊版本的B;怎么办呢?是否可以考虑下直接把Spring容器里的某个组件(Bean)替换成你自己实现的Bean? 2、原理&实现 2.1 先看看Spring开放给我们的扩展 Spring框架超强的扩展性毋庸置疑,我们可以通过BeanPostProcessor来简单替换容器中的Bean。 @Component public class MyBeanPostProcessor implements ApplicationContextAware, BeanPostProcessor { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this

死磕 java线程系列之终篇

假装没事ソ 提交于 2020-03-21 09:06:17
(手机横屏看源码更方便) 简介 线程系列我们基本就学完了,这一个系列我们基本都是围绕着线程池在讲,其实关于线程还有很多东西可以讲,后面有机会我们再补充进来。当然,如果你有什么好的想法,也可以公从号右下角联系我。 重要知识点 直接上图,看着这张图我相信你能够回忆起很多东西,也可以看着这张图来自己提问自己回答,当然,也可以把这张图作为面试复习的参考。 其中,ThreadLocal是我们没有分析的类,放在netty系列来学习,敬请期待^^ 彩蛋 下一个系列我们将学习netty相关的知识,当然跑不掉的还有nio。 我为什么直接讲netty了呢? 因为netty很重要,很多框架的底层都是用netty实现的,比如dubbo、spark、hadoop、storm、zookeeper、grpc、flink、thrift、elasticsearch、spring cloud gateway。 只要牵涉到网络通信的框架,基本上都会使用netty作为底层通信,所以,你说netty重不重要,那是相当的重要,so,我们先讲netty。 我为什么不讲spring系列呢? spring系列主要分为三大部分:spring core、spring boot、spring cloud。 spring core主要包含两大功能:spring IoC和spring mvc,这两个功能其实都是比较简单的东西

Spring Cloud各个组件的配套使用

我只是一个虾纸丫 提交于 2020-03-21 08:03:10
我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构。 其中Eureka负责服务的注册与发现,很好将各服务连接起来 Hystrix 负责监控服务之间的调用情况,连续多次失败进行熔断保护。 Hystrix dashboard,Turbine 负责监控 Hystrix的熔断情况,并给予图形化的展示 Spring Cloud Config 提供了统一的配置中心服务 当配置文件发生变化的时候,Spring Cloud Bus 负责通知各服务去获取最新的配置信息 所有对外的请求和服务,我们都通过Zuul来进行转发,起到API网关的作用 最后我们使用Sleuth+Zipkin将所有的请求数据记录下来,方便我们进行后续分析 Spring Cloud从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。这些功能都是以插拔的形式提供出来,方便我们系统架构演进的过程中,可以合理的选择需要的组件进行集成,从而在架构演进的过程中会更加平滑、顺利。 微服务架构是一种趋势,Spring Cloud提供了标准化的、全站式的技术方案,意义可能会堪比当前Servlet规范的诞生,有效推进服务端软件系统技术水平的进步。 从现在开始

使用Spring Boot开发Web项目

喜你入骨 提交于 2020-03-21 04:56:43
前面两篇博客中我们简单介绍了Spring Boot项目的创建、并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so,今天我们就来看一下如何使用Spring Boot来开发Web项目。当然,如果小伙伴对Spring Boot尚不熟悉的话,可以先参考一下这两篇博客: 1. 初识Spring Boot框架 2. 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置 Spring Boot 提供了spring-boot-starter-web来为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及SpringMVC的依赖,用起来很方便。另外,我们这里还要用到模板引擎,我们做web开发可选的模板引擎还是挺多的,这里我主要使用Thymeleaf作为模板引擎,事实上,Spring Boot提供了大量的模板引擎,包括FreeMarker、Groovy、Thymeleaf、Velocity和Mustache,在 提供的这么多中它推荐使用Thymeleaf。Thymeleaf在使用的过程中通过ThymeleafAutoConfiguration类对集成所需要的Bean进行自动配置

SpringBoot Study One Day

浪尽此生 提交于 2020-03-21 02:59:17
什么是Spring? Spring 是一个开源的框架; Spring是为了解决企业应用开发复杂性而创建的,简化开发; Spring是如何简化开发的? 为了降低Java开发的复杂性,Spring采用了以下4种关键策略 1、基于POJO的轻量级和最小侵入性编程; 2、通过IOC、依赖注入(DI)和面向接口实现松耦合; 3、基于切面(AOP)和惯例进行声明式编程; 4、通过切面和模板减少样式代码; SpringBoot的优点是什么? 为所有Spring开发者更快的入门 开箱即用 ,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XML配置的要求 来源: https://www.cnblogs.com/thinkAboutMore/p/12536296.html