当前位置: 首页 > news >正文

【Spring】00 入门指南

文章目录

    • 1.简介
    • 2.概念
      • 1)控制反转(IoC)
      • 2)依赖注入(DI)
    • 3.核心模块
      • 1)Spring Core
      • 2)Spring AOP
      • 3)Spring MVC
      • 4)Spring Data
      • 5)Spring Boot
    • 4.编写 Hello World
      • 1)创建 Maven 项目
      • 2)编写 Hello World 程序
      • 3)编写Spring 配置文件
      • 4)编写启动程序
      • 5)运行
    • 总结

Spring 框架是 Java 领域最最流行和最最强大的开发框架 没有之一

Spring 框架是 Java 领域最最流行和最最强大的开发框架 没有之一

Spring 框架是 Java 领域最最流行和最最强大的开发框架 没有之一

重要的事情,一定要说三遍。纵观历史在它的成长过程中,竞争对手确实存在,但是其对手最后都成为了陪衬!

1.简介

Spring 它为我们提供了广泛的功能,包括依赖注入、面向切面编程、数据访问、事务管理等等,使得 Java 应用程序的开发更加简便和高效。

在这里插入图片描述

本文将为你提供一个简洁而全面的 Spring 框架入门指南,纯粹是为了能够快速掌握基础概念,并开始构建自己的 Spring 应用程序。

2.概念

Spring 框架是一个全面的Java应用程序开发框架,它提供了解决企业级应用开发问题的综合性解决方案。核心特性包括 控制反转(IoC)和 依赖注入(DI),使得组件之间的松散耦合成为可能。接下来就让我们先去了解一下 IoC 和 DI 的基本概念吧。

在这里插入图片描述

1)控制反转(IoC)

控制反转是一种设计原则,它将应用程序的控制权从应用程序代码中转移到外部容器。在 Spring 中,IoC 体现为将对象的创建和管理交给 Spring 容器,而不是由开发者手动管理。这通过使用 Spring 容器来实现,其中最核心的是 Bean 。

2)依赖注入(DI)

依赖注入是 IoC 的一种实现方式,它指的是将一个对象的依赖关系注入到对象本身,而不是在对象内部创建或查找依赖对象。Spring 通过 DI 来实现 IoC 确保对象之间的解耦。

3.核心模块

Spring 框架由多个模块组成,每个模块都提供不同的功能

以下是Spring的一些核心模块:

1)Spring Core

Spring Core 模块包括 IoC 容器、Bean 定义、Bean 的生命周期管理等。

2)Spring AOP

Spring AOP 模块支持面向切面编程,允许你在应用程序中定义横切关注点,并在需要时将它们应用到代码中。

3)Spring MVC

Spring MVC 模块是一个基于MVC(Model-View-Controller)设计模式的 Web 框架,用于构建 Web 应用程序。

4)Spring Data

Spring Data 模块简化了数据访问,支持多种数据存储,包括关系型数据库、NoSQL 数据库等。

5)Spring Boot

重磅嘉宾,往往都是压轴出场!

Spring Boot 模块用于简化 Spring 应用程序的开发和部署。它提供了自动配置、开箱即用的特性,使得构建独立的、生产级别的Spring应用变得更加容易。

4.编写 Hello World

现在让我们回到本节的主角,通过一个简单的实例来展示如何使用 Spring 框架构建一个基本的应用程序。

1)创建 Maven 项目

这里使用 IDEA 工具 开发

首先,点击 File -> New -> Project,输入项目信息(Name等),点击 Create 按钮

在这里插入图片描述

然后,打开 pom.xml 添加 maven 依赖(spring-context),一定要点 maven 的刷新按钮!

在这里插入图片描述

pom.xml

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.31</version></dependency>
</dependencies>

2)编写 Hello World 程序

编写一个简单的 Java 应用程序,打印 Hello World ,从 Spring 容器中获取 Bean 并调用其打印方法。

首先,在 java 上点击鼠标右键 -> New -> Java Class ,输入名称(此处直接把包创建出来啦),点击回车

然后,再打开 SpringDemo,添加打印 Hello World 的方法

在这里插入图片描述

SpringDemo.java

public class SpringDemo {public void hello() {System.out.println("Hello World");}
}

3)编写Spring 配置文件

创建一个 Spring 配置文件(例如:applicationContext.xml),定义一个简单的 Bean 。

首先,在 resources 上点击鼠标右键 -> New -> File ,输入名称,点击回车

然后,再打开 applicationContext.xml,添加 bean 信息

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义一个Bean --><bean id="springDemo" class="org.example.cheney.SpringDemo"></bean>
</beans>

4)编写启动程序

首先,在 org.example.cheney 包上点击鼠标右键 -> New -> Java Class,输入名称,点击回车

然后,再打开 App,添加 从 Spring 容器中获取 SpringDemo 实例,并执行 hello 方法的代码

在这里插入图片描述

App.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {String location = "applicationContext.xml";ApplicationContext context = new ClassPathXmlApplicationContext(location);// 从容器中获取BeanSpringDemo springDemo = (SpringDemo) context.getBean("springDemo");// 调用Bean的方法springDemo.hello();}
}

5)运行

点击 小绿三角,然后点击 Run xxx,最后就在控制台看到 Hello World 啦

在这里插入图片描述

输出结果:

Hello World

这只是 Spring 框架入门的简单示例。随着深入学习,你将能够利用 Spring 的强大功能构建更复杂的应用程序。

总结

通过本文,你已经了解了Spring框架的核心概念、模块和实际应用。以及详细的写了一个 SpringDemo 样例去打印 Hello World,要深入学习,建议查阅Spring的官方文档。

相关文章:

【Spring】00 入门指南

文章目录 1.简介2.概念1&#xff09;控制反转&#xff08;IoC&#xff09;2&#xff09;依赖注入&#xff08;DI&#xff09; 3.核心模块1&#xff09;Spring Core2&#xff09;Spring AOP3&#xff09;Spring MVC4&#xff09;Spring Data5&#xff09;Spring Boot 4.编写 Hel…...

BIM 技术:CIM (City Information Modeling) 1-7 级

本心、输入输出、结果 文章目录 BIM 技术&#xff1a;CIM &#xff08;City Information Modeling&#xff09; 1-7 级前言城市信息模型&#xff08;CIM&#xff09;概述城市信息模型分级介绍CIM 1CIM 2CIM 3CIM 4CIM 5CIM 6CIM 7 花有重开日&#xff0c;人无再少年实践是检验真…...

c++ websocket 协议分析与实现

前言 网上有很多第三方库&#xff0c;nopoll,uwebsockets,libwebsockets,都喜欢回调或太复杂&#xff0c;个人只需要在后端用&#xff0c;所以手动写个&#xff1b; 1:环境 ubuntu18 g(支持c11即可) 第三方库:jsoncpp,openssl 2:安装 jsoncpp 读取json 配置文件 用 自动安装 网…...

kali虚拟机无网络

1.查看虚拟机的网卡模式 在虚拟机设置里&#xff0c;一般选择桥接模式&#xff0c;也可以选择NAT模式。 2、你的IP地址是否写死了&#xff08;设置为静态IP&#xff09; vim编辑模式下的命令&#xff1a; 按a或i进入编辑模式&#xff0c;然后按esc键退出编辑模式&#xff0c;s…...

Unity2023.3(Unity6)版本开始将可以发布WebGPU

翻译一段官网上的话&#xff1a; 利用Unity 2023.3(正式发布时应该称为Unity6)中最新的WebGPU图形API集成&#xff0c;尝试最大限度的提升您的网络游戏的真实感。 通过与谷歌的战略合作&#xff0c;Unity实时3D平台的强大的图形功能现在为图形丰富的网络游戏进行微调&#xff0…...

计算机网络期末考试A卷及答案

一、选择题&#xff08;30分&#xff0c;每题1分&#xff09; 世界上第一个网络系统是( C )。 A、ENIAC B、以太网 C、ARPANET D、DECNET 2&#xff0e;在常用的传输介质中&#xff0c;&#xff08; C &#xff09;的带宽最宽、信号传输衰减最小、抗干扰能力最强。 A.双绞线 …...

<蓝桥杯软件赛>零基础备赛20周--第10周--二分

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…...

C++友元类,工厂模式和继承的融合案例

//友元没有继承性&#xff0c;没有传递性,所以在animal中定义友元类是无效的class animal{public:animal(){};virtual ~animal(){};};class Cat:public animal{friend class animalFactory;private:Cat(){}private:string m_name;string m_color;public:void about(){cout<&…...

使用 ?? 重新定义逻辑以获得更严格、更安全的 JavaScript 默认值

使用 ?? 重新定义逻辑以获得更严格、更安全的 JavaScript 默认值 JavaScript 中的 ?? 运算符称为 nullish 合并运算符。该运算符接受任一侧的操作数&#xff0c;并且仅当左侧操作数为空值时才返回右侧操作数。这个运算符绝对是一个较新的运算符&#xff0c;它是在 ES2020 …...

Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7

问题描述&#xff1a;Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 最近在学习如何将YOLO部署在手机端&#xff0c;出现了许多错误&#xff0c;下面这个错误是手机和电脑连结之后&#xff0c;点击run之后出现的错误。 解决办法&#xff1a;将JDK版本将为…...

Python Django Suit:构建现代化的Django后台管理

概要 Django Suit是一款为Django后台管理提供现代、优雅界面的第三方应用&#xff0c;它致力于提升Django开发者的管理体验。本文将深入介绍Django Suit的安装、配置和高级功能&#xff0c;提供详实的示例代码&#xff0c;帮助大家更好地使用和定制Django后台管理界面。 安装与…...

电子学会C/C++编程等级考试2021年09月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:双端队列 定义一个双端队列,进队操作与普通队列一样,从队尾进入。出队操作既可以从队头,也可以从队尾。编程实现这个数据结构。 时间限制:1000 内存限制:65535输入 第一行输入一个整数t,代表测试数据的组数。 每组数据的…...

SpringBoot 源码解析

前言 本文只是纯源码分析文章&#xff0c;阅读者需要有Spring或者SpringBoot使用经验。 SpringBoot 源码解析 SpringBoot 源码解析1&#xff1a;环境搭建 SpringBoot 源码解析2&#xff1a;启动流程1 SpringBoot 源码解析3&#xff1a;启动流程2 SpringBoot 源码解析4&#…...

dockerfile---创建镜像

dockerfile创建镜像&#xff1a;创建自定义镜像。 包扩配置文件的创建&#xff0c;挂载点&#xff0c;对外暴露的端口。设置环境变量。 docker镜像的方式: 1、基于官方源进行创建 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起容器。是一个白板&#xff0c…...

Raspberry PI + Codesys + EtherCAT步进驱动ECR60 Motion功能测试

原文连接&#xff1a;Raspberry PI Codesys EtherCAT步进驱动ECR60 Motion功能测试 – 个人资料收集 (rtplc.com) <div class"post_info_wrapper "> <p class"has-drop-cap">运动控制功能是codesys及EtherCAT通讯的重要功能&am…...

03 Temporal 详细介绍

前言 在后端开发中&#xff0c;大家是否有遇到如下类型的开发场景 需要处理较多的异步事件需要的外部服务可靠性较低需要记录保存某个对象的复杂状态 在以往的开发过程中&#xff0c;可能更多的直接使用数据库、定时任务、消息队列等作为基础&#xff0c;来解决上面的问题。然…...

【算法】【动规】乘积为正数的最长子数组长度

跳转汇总链接 &#x1f449;&#x1f517;算法题汇总链接 1.1 乘积为正数的最长子数组长度 &#x1f517;题目链接 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积…...

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的&#xff0c;节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色&#xff1a;master 和 node。 master 节点&#xff1a;master 节点负责控制和管理整个集群…...

Spring之容器:IOC(1)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…...

【.Net 6.0--通用帮助类--ConvertHelper】

前言 类型转换帮助类&#xff0c;包含下表中的方法&#xff1a; 方法名方法解释ObjToIntobject转intObjToMoneyobject转doubleObjToStringobject转stringObjToDecimalobject转decimalObjToDateobject转datetimeObjToDateSplitYMDobject转datetime&#xff08;yyyy-MM-dd&…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...