1.Spring概述(Spring官方文档总结)

news2024/11/24 2:26:18

目录

1.1jdk环境依赖

1.2 Spring介绍

1.3 Spring历史

1.4 设计理念


1.1 jdk环境依赖

从Spring Framework 5.1开始,Spring需要JDK 8+ (Java SE 8+),并提供对JDK 11 LTS的开箱即用支持。建议将Java SE 8 update 60作为Java 8的最低补丁版本,但通常建议使用最新的补丁版本。

1.2 Spring介绍

Spring分为许多模块,应用可以选择他们所需要的模块。Spring的核心模块是core container(核心容器),It including a configuration model and a dependency injection mechanism。除此之外,Spring框架还为不同的应用程序体系结构提供基础支持,包括消息传递、事务数据和持久性以及web

1.3 Spring历史

创建Spring的主要目的是用来替代更加重量级的Java企业级技术,尤其是EJB(Enterprise JavaBean

Spring框架通过以下规范,简化了早期J2EE规范的复杂性。

    Servlet API (JSR 340)
    WebSocket API (JSR 356)
    Concurrency Utilities (JSR 236)
    JSON Binding API (JSR 367)
    Bean Validation (JSR 303)
    JPA (JSR 338)
    JMS (JSR 914)
    as well as JTA/JCA setups for transaction coordination, if necessary.
    the Dependency Injection (JSR 330) and Common Annotations (JSR 250)

1.4 设计理念

学习框架时,不仅仅需要知道它是怎么使用和怎么做的,更需要了解它遵循的原则。

Spring最根本的使命:简化Java开发
这是一个郑重的承诺。许多框架都声称在某些方面做了简化,但Spring的目标是致力于全方位的简化Java开发。
Spring是如何简化Java开发的?
为了降低Java开发的复杂性,Spring采取了以下4种关键策略:


1.基于POJO的轻量级和最小侵入性编程

很多框架(如Struts)通过强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死,

Spring不会强迫你实现接口或继承类,相反,在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类或许会使用Spring注解,但它依旧是POJO。

尽管形式看起来很简单,但POJO一样可以具有魔力。Spring赋予POJO魔力的方式之一就是通过DI来装配它们

2.通过依赖注入和面向接口实现松耦合;

在项目中应用DI(Dependency Injection),代码会变得异常简单并且更容易理解和测试。

任何一个有实际意义的应用都会由两个或者更多的类组成,这些类相互之间进行协作来完成特定的业务逻辑。按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。

package com.Spring.Knight;

public class DamselResuingKnight implements Knight{
    private  ResumDamselQuest quest;

    public DameslResuingKnight() {
        // RescueDamselQuest与DameslResuingKnight相耦合,骑士不能再执行其它任务
        // 骑士只能执行拯救落难公主,不能执行像屠杀恶龙等任务。
        this.qeust = new RescueDamselQuest();
    }

    public void emabrakOnQuest() {
        // 对这个类进行单元测试,也会变得异常麻烦,必须保证emabrakOnQuest()被调用时
        // 传入对象的embaek()也被调用
        quest.embaek();
    }
}

耦合具有两面性:

一方面,紧密耦合的代码难以测试、难以复用、难以理解,并且典型地表现出“打地鼠”式的bug特性(修复一个bug,将会出现一个或者更多新的bug)。

另一方面,一定程度的耦合又是必须的——完全没有耦合的代码什么也做不了。为了完成有实际意义的功能,不同的类必须以适当的方式进行交互。

总而言之,耦合是必须的,但应当被小心谨慎地管理。

通过DI,依赖的对象将由第三方组件(Spring IOC 容器)创建对象的时候提供。依赖对象无需自行创建管理,如图1.1所示,依赖对象将被自动注入到需要它们的对象当中。

图1.1 依赖注入会将所依赖的对象自动交给目标对象,而不是让对象自己去获取。

package com.Spring.Knight;

public class DamselResuingKnight implements Knight{
    private  ResumDamselQuest quest;

    public DameslResuingKnight(Quest quest) {
        // 对象不用自己再去获取所需要的依赖,由第三方组件所提供。
        // 骑士也因此可以执行多种任务
        this.qeust = quest;
    }

    public void emabrakOnQuest() {
        quest.embaek();
    }
}

 这就是DI所带来的最大收益:

如果一个对象只通过接口来表明依赖关系,

那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现进行替换

3.基于切面和惯例进行声明式编程;


4.通过切面和模板减少样板式代码;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

由于找不到qt5core.dll,无法继续执行代码的问题

由于找不到qt5core.dll,无法继续执行代码的问题处理,其实和平常的dll缺失处理方法是差不多的 一. 下载qt5core.dll文件来解决 1.在百度搜索qt5core.dll这个dll文件,并且下载到自己的电脑 2.或者是直接在别人的电脑找qt5core.dll,然后拷贝到…

(附源码)ssm医护服务平台 毕业设计 260954

SSM医护服务平台 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设医护…

XFINIUM.PDF CROSS-PLATFORM BUNDLE 11.1.2

轻松将您的 PDF 应用程序移植到其他平台。 XFINIUM.PDF CROSS-PLATFORM BUNDLE 是一个用于跨平台 PDF 开发的库。在所有支持的平台(.NET、Windows Forms、Xamarin.Mac、ASP.NET Webforms 和 MVC、控制台应用程序、Windows 服务、Mono、Windows Presentation Foundat…

Python.02.语法进阶

目录 基本运算符 比较运算符 赋值运算符 多变量赋值 逻辑运算符 案例: 案例实现源码如下 三元运算符 条件语句 循环语句 1.计算0-100的求和 2.for循环数组求和 3.range定义一个1-100的奇数数组,for循环求出数组的和 4.while...else...语法 基本运算符 比较…

联通物联网卡激活方法

科技的发展日新月异,我们国家的发展战略也是支持高新科技公司的发展,所以越来越多的高新科技公司出现,但凡是高新科技公司,在设备的联网中,都会用到物联卡,所以物联卡的市场也愈发火爆,那么今天…

Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

pytorch复习笔记--nn.Embedding()的用法

目录 1--nn.Embedding()的用法 2--实例展示: 3--注意的问题 1--nn.Embedding()的用法 import torch.nn as nnembedding nn.Embedding(num_embeddings 10, embedding_dim 256) nn.Embedding()产生一个权重矩阵weight,其shape为(num_em…

图解:Go Mutext

Mutex 可能处于两种不同的模式:正常模式和饥饿模式。 正常模式下获取Mutex 在正常模式下,新来的G会尝试自旋获取锁,如果自旋获取失败,则会按照FIFO的顺序排队获取锁。 当Mutex被释放,会唤醒等待队列中第一个等待者G&…

[附源码]计算机毕业设计求职招聘网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring框架的介绍、工厂设计模式以及Spring环境的搭建

spring崇尚:不重复的造轮子 二、工厂设计模式 工厂设计模式:工厂生产对象(配置文件properties反射) Spring创建对象的实现原理: 根据配置文件的id得到对应的class属性值,根据反射,通过类全路径创建对象; 通过配置文件,通过工厂设计模式,有反射动态创…

matlab knn方法快速实现,手把手教学

目录介绍话不多说,进入实战注意事项KNN算法的优势和劣势介绍 1968年,Cover和Hart提出K近邻算法。该算法既可以用于回归也可以用于分类,其用于分类时其输入为实例的特征向量,输出为实例的类别。假设给定一个训练数据集&#xff0c…

PsiQuantum宣布在容错量子计算架构方面取得新突破

(图片来源:网络) 12月2日,PsiQuantum宣布了一项突破性技术,该技术将使编译应用程序在运行时效率提高约50倍。可以更有效地实现容错量子计算。 该技术专门针对容错量子计算机的算法,而不是非容错的NISQ系统。…

linux倒序查看占用cpu或内存最多的进程

一、获取当前系统占用CPU最高的前10个进程 命令:ps aux|head -1;ps aux|sort -rn -k3|head -10 该命令组合由2条独立的命令组成: ps aux|head -1:这一句是为了获取标题(USER PID %CPU %MEN VSZ RSS TTY STAT START TIME COMMAND…

儿童学生护眼台灯哪个牌子好?双十二儿童护眼台灯精选

我国儿童以及青少年的近视人数迅速增加,主要是不注意用眼时间,不良好的照明光线,拥有一个明亮舒适的光线环境,能大大减少近视概率,推荐合适的儿童护眼台灯给大家。 TOP1:南卡护眼台灯L1 推荐指数&#xf…

每天一个面试题:ThreadLocal底层原理和实现Demo(12.6.2022)

ThreadLocal底层原理和实现Demo每天一个面试题:ThreadLocal实现ThreadLocal的DemoThreadLocal底层原理为什么ThreadLocalMap的key设计为弱引用今天开始一个新专栏:每天一个面试题系列 也没有拿到令人心动的offer,看来自己学习方式和能力还是差…

霸榜!这本《程序员如何向架构师转型》在Github已持续置顶两月

前言 企业架构在过去十年中取得了长足的进步。随着越来越多新技术出现,充分利用这些因素来将企业架构创建得更好十分重要。通过将新技术集成到企业架构中,即使在困难时期,也能取得丰硕的成果。现代企业架构师的 5 个特征: 1. IT…

PyQt利用QScrollArea+QGridLayout制作一个滑动的Grid布局(QT Designer)

目录前言制作ui文件推送结语前言 有需求需要做一个滑动的Grid布局结构,网上找了很多的文章都是介绍直接用代码去生成的,没有看到用QT Designer做好后再怎么处理,这里研究了一下,以作记录和参考 制作ui文件 新建一个MainWindow 我…

本周推荐 | 基于 canvas 实现 H5 丝滑看图体验

推荐语:随着机器算力及性能的提升,基于原生Web体系的富交互体验也可以媲美原生,本文作者通过Canvas Web手势从零实现了大图浏览的交互效果,并在体验上不输Native,是一次不错的技术尝试,欢迎阅读。——大淘…

家庭宽带相关知识及工具

1.FTTH、FTTR、FTTB FTTH,光纤到户,需要用到光猫,目前主流,最高到千兆(1G),局域网内为网线(超五类、六类等)连接。 FTTR,光纤到房间,或者说是光纤到终端,全光网,最高到万…

技术分享| 音视频与微信小程序互通实践

随着网络架构的变迁、媒体技术发展、音视频场景迭代&#xff0c;基于流媒体的技术也是推陈出新。WebRTC渐渐的成为了音视频互动场景的主流&#xff0c;而微信在6.5.21版本通过小程序开放了实时音视频能力&#xff0c;开发者们可以使用组件 < live-pusher > 实现基于 RTMP…