Spring Http源码

简介: /*Copyright 2002-2017 the original author or authors.Licensed under the Apache License, Version 2.

/*

  • Copyright 2002-2017 the original author or authors.
  • Licensed under the Apache License, Version 2.0 (the "License");
  • you may not use this file except in compliance with the License.
  • You may obtain a copy of the License at
  •  http://www.apache.org/licenses/LICENSE-2.0
    
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS,
  • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • See the License for the specific language governing permissions and
  • limitations under the License.
    */

package org.springframework.http;

/**

  • Enumeration of HTTP status codes.

  • <p>The HTTP status code series can be retrieved via {@link #series()}.

  • @author Arjen Poutsma

  • @author Sebastien Deleuze

  • @author Brian Clozel

  • @since 3.0

  • @see HttpStatus.Series

  • @see <a href="http://www.iana.org/assignments/http-status-codes">HTTP Status Code Registry</a>

  • @see <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">List of HTTP status codes - Wikipedia</a>
    */
    public enum HttpStatus {

    // 1xx Informational

    /**

    • {@code 100 Continue}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.2.1">HTTP/1.1: Semantics and Content, section 6.2.1</a>
      /
      CONTINUE(100, "Continue"),
      /
      *
    • {@code 101 Switching Protocols}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.2.2">HTTP/1.1: Semantics and Content, section 6.2.2</a>
      /
      SWITCHING_PROTOCOLS(101, "Switching Protocols"),
      /
      *
    • {@code 102 Processing}.
    • @see <a href="http://tools.ietf.org/html/rfc2518#section-10.1">WebDAV</a>
      /
      PROCESSING(102, "Processing"),
      /
      *
    • {@code 103 Checkpoint}.
    • @see <a href="http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal">A proposal for supporting
    • resumable POST/PUT HTTP requests in HTTP/1.0</a>
      */
      CHECKPOINT(103, "Checkpoint"),

    // 2xx Success

    /**

    • {@code 200 OK}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.1">HTTP/1.1: Semantics and Content, section 6.3.1</a>
      /
      OK(200, "OK"),
      /
      *
    • {@code 201 Created}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.2">HTTP/1.1: Semantics and Content, section 6.3.2</a>
      /
      CREATED(201, "Created"),
      /
      *
    • {@code 202 Accepted}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.3">HTTP/1.1: Semantics and Content, section 6.3.3</a>
      /
      ACCEPTED(202, "Accepted"),
      /
      *
    • {@code 203 Non-Authoritative Information}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.4">HTTP/1.1: Semantics and Content, section 6.3.4</a>
      /
      NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information"),
      /
      *
    • {@code 204 No Content}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.5">HTTP/1.1: Semantics and Content, section 6.3.5</a>
      /
      NO_CONTENT(204, "No Content"),
      /
      *
    • {@code 205 Reset Content}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.6">HTTP/1.1: Semantics and Content, section 6.3.6</a>
      /
      RESET_CONTENT(205, "Reset Content"),
      /
      *
    • {@code 206 Partial Content}.
    • @see <a href="http://tools.ietf.org/html/rfc7233#section-4.1">HTTP/1.1: Range Requests, section 4.1</a>
      /
      PARTIAL_CONTENT(206, "Partial Content"),
      /
      *
    • {@code 207 Multi-Status}.
    • @see <a href="http://tools.ietf.org/html/rfc4918#section-13">WebDAV</a>
      /
      MULTI_STATUS(207, "Multi-Status"),
      /
      *
    • {@code 208 Already Reported}.
    • @see <a href="http://tools.ietf.org/html/rfc5842#section-7.1">WebDAV Binding Extensions</a>
      /
      ALREADY_REPORTED(208, "Already Reported"),
      /
      *
    • {@code 226 IM Used}.
    • @see <a href="http://tools.ietf.org/html/rfc3229#section-10.4.1">Delta encoding in HTTP</a>
      */
      IM_USED(226, "IM Used"),

    // 3xx Redirection

    /**

    • {@code 300 Multiple Choices}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.1">HTTP/1.1: Semantics and Content, section 6.4.1</a>
      /
      MULTIPLE_CHOICES(300, "Multiple Choices"),
      /
      *
    • {@code 301 Moved Permanently}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.2">HTTP/1.1: Semantics and Content, section 6.4.2</a>
      /
      MOVED_PERMANENTLY(301, "Moved Permanently"),
      /
      *
    • {@code 302 Found}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.3">HTTP/1.1: Semantics and Content, section 6.4.3</a>
      /
      FOUND(302, "Found"),
      /
      *
    • {@code 302 Moved Temporarily}.
    • @see <a href="http://tools.ietf.org/html/rfc1945#section-9.3">HTTP/1.0, section 9.3</a>
    • @deprecated in favor of {@link #FOUND} which will be returned from {@code HttpStatus.valueOf(302)}
      /
      @Deprecated
      MOVED_TEMPORARILY(302, "Moved Temporarily"),
      /
      *
    • {@code 303 See Other}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.4">HTTP/1.1: Semantics and Content, section 6.4.4</a>
      /
      SEE_OTHER(303, "See Other"),
      /
      *
    • {@code 304 Not Modified}.
    • @see <a href="http://tools.ietf.org/html/rfc7232#section-4.1">HTTP/1.1: Conditional Requests, section 4.1</a>
      /
      NOT_MODIFIED(304, "Not Modified"),
      /
      *
    • {@code 305 Use Proxy}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.5">HTTP/1.1: Semantics and Content, section 6.4.5</a>
    • @deprecated due to security concerns regarding in-band configuration of a proxy
      /
      @Deprecated
      USE_PROXY(305, "Use Proxy"),
      /
      *
    • {@code 307 Temporary Redirect}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.7">HTTP/1.1: Semantics and Content, section 6.4.7</a>
      /
      TEMPORARY_REDIRECT(307, "Temporary Redirect"),
      /
      *
    • {@code 308 Permanent Redirect}.
    • @see <a href="http://tools.ietf.org/html/rfc7238">RFC 7238</a>
      */
      PERMANENT_REDIRECT(308, "Permanent Redirect"),

    // --- 4xx Client Error ---

    /**

    • {@code 400 Bad Request}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.1">HTTP/1.1: Semantics and Content, section 6.5.1</a>
      /
      BAD_REQUEST(400, "Bad Request"),
      /
      *
    • {@code 401 Unauthorized}.
    • @see <a href="http://tools.ietf.org/html/rfc7235#section-3.1">HTTP/1.1: Authentication, section 3.1</a>
      /
      UNAUTHORIZED(401, "Unauthorized"),
      /
      *
    • {@code 402 Payment Required}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.2">HTTP/1.1: Semantics and Content, section 6.5.2</a>
      /
      PAYMENT_REQUIRED(402, "Payment Required"),
      /
      *
    • {@code 403 Forbidden}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.3">HTTP/1.1: Semantics and Content, section 6.5.3</a>
      /
      FORBIDDEN(403, "Forbidden"),
      /
      *
    • {@code 404 Not Found}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.4">HTTP/1.1: Semantics and Content, section 6.5.4</a>
      /
      NOT_FOUND(404, "Not Found"),
      /
      *
    • {@code 405 Method Not Allowed}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.5">HTTP/1.1: Semantics and Content, section 6.5.5</a>
      /
      METHOD_NOT_ALLOWED(405, "Method Not Allowed"),
      /
      *
    • {@code 406 Not Acceptable}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.6">HTTP/1.1: Semantics and Content, section 6.5.6</a>
      /
      NOT_ACCEPTABLE(406, "Not Acceptable"),
      /
      *
    • {@code 407 Proxy Authentication Required}.
    • @see <a href="http://tools.ietf.org/html/rfc7235#section-3.2">HTTP/1.1: Authentication, section 3.2</a>
      /
      PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required"),
      /
      *
    • {@code 408 Request Timeout}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.7">HTTP/1.1: Semantics and Content, section 6.5.7</a>
      /
      REQUEST_TIMEOUT(408, "Request Timeout"),
      /
      *
    • {@code 409 Conflict}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.8">HTTP/1.1: Semantics and Content, section 6.5.8</a>
      /
      CONFLICT(409, "Conflict"),
      /
      *
    • {@code 410 Gone}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.9">HTTP/1.1: Semantics and Content, section 6.5.9</a>
      /
      GONE(410, "Gone"),
      /
      *
    • {@code 411 Length Required}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.10">HTTP/1.1: Semantics and Content, section 6.5.10</a>
      /
      LENGTH_REQUIRED(411, "Length Required"),
      /
      *
    • {@code 412 Precondition failed}.
    • @see <a href="http://tools.ietf.org/html/rfc7232#section-4.2">HTTP/1.1: Conditional Requests, section 4.2</a>
      /
      PRECONDITION_FAILED(412, "Precondition Failed"),
      /
      *
    • {@code 413 Payload Too Large}.
    • @since 4.1
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.11">HTTP/1.1: Semantics and Content, section 6.5.11</a>
      /
      PAYLOAD_TOO_LARGE(413, "Payload Too Large"),
      /
      *
    • {@code 413 Request Entity Too Large}.
    • @see <a href="http://tools.ietf.org/html/rfc2616#section-10.4.14">HTTP/1.1, section 10.4.14</a>
    • @deprecated in favor of {@link #PAYLOAD_TOO_LARGE} which will be returned from {@code HttpStatus.valueOf(413)}
      /
      @Deprecated
      REQUEST_ENTITY_TOO_LARGE(413, "Request Entity Too Large"),
      /
      *
    • {@code 414 URI Too Long}.
    • @since 4.1
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.12">HTTP/1.1: Semantics and Content, section 6.5.12</a>
      /
      URI_TOO_LONG(414, "URI Too Long"),
      /
      *
    • {@code 414 Request-URI Too Long}.
    • @see <a href="http://tools.ietf.org/html/rfc2616#section-10.4.15">HTTP/1.1, section 10.4.15</a>
    • @deprecated in favor of {@link #URI_TOO_LONG} which will be returned from {@code HttpStatus.valueOf(414)}
      /
      @Deprecated
      REQUEST_URI_TOO_LONG(414, "Request-URI Too Long"),
      /
      *
    • {@code 415 Unsupported Media Type}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.13">HTTP/1.1: Semantics and Content, section 6.5.13</a>
      /
      UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),
      /
      *
    • {@code 416 Requested Range Not Satisfiable}.
    • @see <a href="http://tools.ietf.org/html/rfc7233#section-4.4">HTTP/1.1: Range Requests, section 4.4</a>
      /
      REQUESTED_RANGE_NOT_SATISFIABLE(416, "Requested range not satisfiable"),
      /
      *
    • {@code 417 Expectation Failed}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.14">HTTP/1.1: Semantics and Content, section 6.5.14</a>
      /
      EXPECTATION_FAILED(417, "Expectation Failed"),
      /
      *
    • {@code 418 I'm a teapot}.
    • @see <a href="http://tools.ietf.org/html/rfc2324#section-2.3.2">HTCPCP/1.0</a>
      /
      I_AM_A_TEAPOT(418, "I'm a teapot"),
      /
      *
    • @deprecated See <a href="http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt">WebDAV Draft Changes</a>
      /
      @Deprecated
      INSUFFICIENT_SPACE_ON_RESOURCE(419, "Insufficient Space On Resource"),
      /
      *
    • @deprecated See <a href="http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt">WebDAV Draft Changes</a>
      /
      @Deprecated
      METHOD_FAILURE(420, "Method Failure"),
      /
      *
    • @deprecated See <a href="http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt">WebDAV Draft Changes</a>
      /
      @Deprecated
      DESTINATION_LOCKED(421, "Destination Locked"),
      /
      *
    • {@code 422 Unprocessable Entity}.
    • @see <a href="http://tools.ietf.org/html/rfc4918#section-11.2">WebDAV</a>
      /
      UNPROCESSABLE_ENTITY(422, "Unprocessable Entity"),
      /
      *
    • {@code 423 Locked}.
    • @see <a href="http://tools.ietf.org/html/rfc4918#section-11.3">WebDAV</a>
      /
      LOCKED(423, "Locked"),
      /
      *
    • {@code 424 Failed Dependency}.
    • @see <a href="http://tools.ietf.org/html/rfc4918#section-11.4">WebDAV</a>
      /
      FAILED_DEPENDENCY(424, "Failed Dependency"),
      /
      *
    • {@code 426 Upgrade Required}.
    • @see <a href="http://tools.ietf.org/html/rfc2817#section-6">Upgrading to TLS Within HTTP/1.1</a>
      /
      UPGRADE_REQUIRED(426, "Upgrade Required"),
      /
      *
    • {@code 428 Precondition Required}.
    • @see <a href="http://tools.ietf.org/html/rfc6585#section-3">Additional HTTP Status Codes</a>
      /
      PRECONDITION_REQUIRED(428, "Precondition Required"),
      /
      *
    • {@code 429 Too Many Requests}.
    • @see <a href="http://tools.ietf.org/html/rfc6585#section-4">Additional HTTP Status Codes</a>
      /
      TOO_MANY_REQUESTS(429, "Too Many Requests"),
      /
      *
    • {@code 431 Request Header Fields Too Large}.
    • @see <a href="http://tools.ietf.org/html/rfc6585#section-5">Additional HTTP Status Codes</a>
      /
      REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large"),
      /
      *
    • {@code 451 Unavailable For Legal Reasons}.
    • @see <a href="https://tools.ietf.org/html/draft-ietf-httpbis-legally-restricted-status-04">
    • An HTTP Status Code to Report Legal Obstacles</a>
    • @since 4.3
      */
      UNAVAILABLE_FOR_LEGAL_REASONS(451, "Unavailable For Legal Reasons"),

    // --- 5xx Server Error ---

    /**

    • {@code 500 Internal Server Error}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.1">HTTP/1.1: Semantics and Content, section 6.6.1</a>
      /
      INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
      /
      *
    • {@code 501 Not Implemented}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.2">HTTP/1.1: Semantics and Content, section 6.6.2</a>
      /
      NOT_IMPLEMENTED(501, "Not Implemented"),
      /
      *
    • {@code 502 Bad Gateway}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.3">HTTP/1.1: Semantics and Content, section 6.6.3</a>
      /
      BAD_GATEWAY(502, "Bad Gateway"),
      /
      *
    • {@code 503 Service Unavailable}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.4">HTTP/1.1: Semantics and Content, section 6.6.4</a>
      /
      SERVICE_UNAVAILABLE(503, "Service Unavailable"),
      /
      *
    • {@code 504 Gateway Timeout}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.5">HTTP/1.1: Semantics and Content, section 6.6.5</a>
      /
      GATEWAY_TIMEOUT(504, "Gateway Timeout"),
      /
      *
    • {@code 505 HTTP Version Not Supported}.
    • @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.6">HTTP/1.1: Semantics and Content, section 6.6.6</a>
      /
      HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version not supported"),
      /
      *
    • {@code 506 Variant Also Negotiates}
    • @see <a href="http://tools.ietf.org/html/rfc2295#section-8.1">Transparent Content Negotiation</a>
      /
      VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates"),
      /
      *
    • {@code 507 Insufficient Storage}
    • @see <a href="http://tools.ietf.org/html/rfc4918#section-11.5">WebDAV</a>
      /
      INSUFFICIENT_STORAGE(507, "Insufficient Storage"),
      /
      *
    • {@code 508 Loop Detected}
    • @see <a href="http://tools.ietf.org/html/rfc5842#section-7.2">WebDAV Binding Extensions</a>
      /
      LOOP_DETECTED(508, "Loop Detected"),
      /
      *
    • {@code 509 Bandwidth Limit Exceeded}
      /
      BANDWIDTH_LIMIT_EXCEEDED(509, "Bandwidth Limit Exceeded"),
      /
      *
    • {@code 510 Not Extended}
    • @see <a href="http://tools.ietf.org/html/rfc2774#section-7">HTTP Extension Framework</a>
      /
      NOT_EXTENDED(510, "Not Extended"),
      /
      *
    • {@code 511 Network Authentication Required}.
    • @see <a href="http://tools.ietf.org/html/rfc6585#section-6">Additional HTTP Status Codes</a>
      */
      NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required");
private final int value;

private final String reasonPhrase;


HttpStatus(int value, String reasonPhrase) {
    this.value = value;
    this.reasonPhrase = reasonPhrase;
}


/**
 * Return the integer value of this status code.
 */
public int value() {
    return this.value;
}

/**
 * Return the reason phrase of this status code.
 */
public String getReasonPhrase() {
    return this.reasonPhrase;
}

/**
 * Whether this status code is in the HTTP series
 * {@link org.springframework.http.HttpStatus.Series#INFORMATIONAL}.
 * This is a shortcut for checking the value of {@link #series()}.
 */
public boolean is1xxInformational() {
    return Series.INFORMATIONAL.equals(series());
}

/**
 * Whether this status code is in the HTTP series
 * {@link org.springframework.http.HttpStatus.Series#SUCCESSFUL}.
 * This is a shortcut for checking the value of {@link #series()}.
 */
public boolean is2xxSuccessful() {
    return Series.SUCCESSFUL.equals(series());
}

/**
 * Whether this status code is in the HTTP series
 * {@link org.springframework.http.HttpStatus.Series#REDIRECTION}.
 * This is a shortcut for checking the value of {@link #series()}.
 */
public boolean is3xxRedirection() {
    return Series.REDIRECTION.equals(series());
}


/**
 * Whether this status code is in the HTTP series
 * {@link org.springframework.http.HttpStatus.Series#CLIENT_ERROR}.
 * This is a shortcut for checking the value of {@link #series()}.
 */
public boolean is4xxClientError() {
    return Series.CLIENT_ERROR.equals(series());
}

/**
 * Whether this status code is in the HTTP series
 * {@link org.springframework.http.HttpStatus.Series#SERVER_ERROR}.
 * This is a shortcut for checking the value of {@link #series()}.
 */
public boolean is5xxServerError() {
    return Series.SERVER_ERROR.equals(series());
}

/**
 * Returns the HTTP status series of this status code.
 * @see HttpStatus.Series
 */
public Series series() {
    return Series.valueOf(this);
}

/**
 * Return a string representation of this status code.
 */
@Override
public String toString() {
    return Integer.toString(this.value);
}


/**
 * Return the enum constant of this type with the specified numeric value.
 * @param statusCode the numeric value of the enum to be returned
 * @return the enum constant with the specified numeric value
 * @throws IllegalArgumentException if this enum has no constant for the specified numeric value
 */
public static HttpStatus valueOf(int statusCode) {
    for (HttpStatus status : values()) {
        if (status.value == statusCode) {
            return status;
        }
    }
    throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");
}


/**
 * Enumeration of HTTP status series.
 * <p>Retrievable via {@link HttpStatus#series()}.
 */
public enum Series {

    INFORMATIONAL(1),
    SUCCESSFUL(2),
    REDIRECTION(3),
    CLIENT_ERROR(4),
    SERVER_ERROR(5);

    private final int value;

    Series(int value) {
        this.value = value;
    }

    /**
     * Return the integer value of this status series. Ranges from 1 to 5.
     */
    public int value() {
        return this.value;
    }

    public static Series valueOf(int status) {
        int seriesCode = status / 100;
        for (Series series : values()) {
            if (series.value == seriesCode) {
                return series;
            }
        }
        throw new IllegalArgumentException("No matching constant for [" + status + "]");
    }

    public static Series valueOf(HttpStatus status) {
        return valueOf(status.value);
    }
}

}

目录
相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
103 2
|
2月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
106 5
|
6天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
57 2
|
2月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
75 9
|
4月前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
238 24
|
3月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
207 5
|
3月前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
3月前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
160 9
|
3月前
|
设计模式 JavaScript Java
Spring 事件监听机制源码
Spring 提供了事件发布订阅机制,广泛应用于项目中。本文介绍了如何通过自定义事件类、订阅类和发布类实现这一机制,并展示了如何监听 SpringBoot 启动过程中的多个事件(如 `ApplicationStartingEvent`、`ApplicationEnvironmentPreparedEvent` 等)。通过掌握这些事件,可以更好地理解 SpringBoot 的启动流程。示例代码展示了从事件发布到接收的完整过程。

热门文章

最新文章