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

Spring Boot 的核心注解

一、引言

Spring Boot 作为一种流行的 Java 开发框架,以其简洁高效的开发方式受到广泛关注。其中,核心注解在 Spring Boot 应用的开发中起着至关重要的作用。理解这些注解的含义和用法,对于充分发挥 Spring Boot 的优势至关重要。本文将深入剖析 Spring Boot 的核心注解。

二、@SpringBootApplication 注解

(一)功能概述

  1. 组合注解
    • @SpringBootApplication 是一个组合注解,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的功能。
  2. 配置应用
    • 该注解用于标识一个 Spring Boot 应用的主配置类,告诉 Spring Boot 框架如何进行自动配置和组件扫描。

(二)用法详解

  1. 定义主类
    • 在 Spring Boot 应用中,通常会创建一个主类,并使用 @SpringBootApplication 注解进行标识。这个主类通常包含一个 main 方法,用于启动应用程序。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

  1. 自动配置

    • @SpringBootApplication 注解会触发 Spring Boot 的自动配置机制。Spring Boot 会根据项目中引入的依赖和类路径中的内容,自动配置应用程序所需的各种组件和配置。
  2. 组件扫描

    • 该注解还会启动组件扫描功能,自动扫描主类所在的包及其子包中的所有带有 @Component、@Service、@Repository、@Controller 等注解的类,并将它们注册为 Spring 容器中的 Bean。

三、@Configuration 注解

(一)功能介绍

  1. 定义配置类
    • @Configuration 注解用于标识一个类为 Spring 的配置类。在配置类中,可以使用 @Bean 注解定义 Bean,并进行各种配置。
  2. 替代 XML 配置
    • 随着 Spring 的发展,越来越多的开发者倾向于使用基于 Java 的配置方式,而 @Configuration 注解就是实现这种配置方式的关键。

(二)用法示例

  1. 定义 Bean
    • 在配置类中,可以使用 @Bean 注解定义 Bean。例如,定义一个名为 myService 的 Bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

  1. 导入其他配置类
    • 可以使用 @Import 注解导入其他配置类,实现配置的模块化。例如:
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;@Configuration
@Import(AnotherConfig.class)
public class MainConfig {
}

四、@EnableAutoConfiguration 注解

(一)自动配置原理

  1. 依赖分析
    • @EnableAutoConfiguration 注解会根据项目中引入的依赖,自动配置应用程序所需的各种组件。例如,如果项目中引入了 Spring Data JPA 的依赖,Spring Boot 会自动配置数据库连接和 JPA 相关的组件。
  2. 排除特定自动配置
    • 有时候,可能需要排除某些自动配置。可以使用 @SpringBootApplication 的 exclude 属性来排除特定的自动配置类。例如:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

(二)使用场景

  1. 快速开发
    • 在快速开发过程中,@EnableAutoConfiguration 注解可以大大减少配置的工作量,提高开发效率。
  2. 集成第三方库
    • 当集成第三方库时,Spring Boot 的自动配置功能可以自动配置与该库相关的组件,使得集成更加简单快捷。

五、@ComponentScan 注解

(一)扫描机制

  1. 包扫描
    • @ComponentScan 注解用于指定 Spring 容器进行组件扫描的包路径。默认情况下,它会扫描主类所在的包及其子包中的所有带有 @Component、@Service、@Repository、@Controller 等注解的类,并将它们注册为 Spring 容器中的 Bean。
  2. 自定义扫描路径
    • 可以通过 basePackages 属性指定自定义的扫描路径。例如:
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan(basePackages = {"com.example.myapp.service", "com.example.myapp.repository"})
public class AppConfig {
}

(二)与其他注解的配合

  1. 与 @Controller、@Service、@Repository 等注解配合
    • @ComponentScan 注解与这些注解配合使用,可以实现自动注册 Bean 的功能。例如,当一个类被标注为 @Service 时,@ComponentScan 注解会将其扫描并注册为 Spring 容器中的一个服务 Bean。
  2. 与 @Configuration 注解配合
    • 在配置类中,通常会使用 @ComponentScan 注解来指定组件扫描的范围,以便将其他带有注解的类注册为 Bean。

六、@Autowired 注解

(一)依赖注入原理

  1. 自动装配
    • @Autowired 注解用于实现依赖注入。当一个类的字段、构造函数或方法被标注为 @Autowired 时,Spring 容器会自动将匹配的 Bean 注入到该字段、构造函数或方法中。
  2. 按类型匹配
    • Spring 容器会根据 Bean 的类型进行匹配。如果有多个相同类型的 Bean,还可以使用 @Qualifier 注解指定具体要注入的 Bean 的名称。

(二)用法示例

  1. 字段注入
    • 在类的字段上使用 @Autowired 注解,实现字段的自动注入。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MyService {@Autowiredprivate MyRepository myRepository;public void doSomething() {// 使用 myRepository}
}

  1. 构造函数注入
    • 在构造函数上使用 @Autowired 注解,实现构造函数的自动注入。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MyService {private final MyRepository myRepository;@Autowiredpublic MyService(MyRepository myRepository) {this.myRepository = myRepository;}public void doSomething() {// 使用 myRepository}
}

  1. 方法注入
    • 在方法上使用 @Autowired 注解,实现方法的自动注入。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MyService {private MyRepository myRepository;@Autowiredpublic void setMyRepository(MyRepository myRepository) {this.myRepository = myRepository;}public void doSomething() {// 使用 myRepository}
}

七、@Value 注解

(一)属性注入

  1. 从配置文件中获取值
    • @Value 注解可以用于从配置文件(如 application.properties 或 application.yml)中获取属性值,并注入到字段、构造函数参数或方法参数中。
  2. 表达式支持
    • 还可以使用 SpEL(Spring Expression Language)表达式来获取更复杂的值。例如:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class MyService {@Value("${my.property}")private String myProperty;@Value("#{T(java.lang.Math).random() * 100}")private int randomNumber;public void doSomething() {// 使用 myProperty 和 randomNumber}
}

(二)使用场景

  1. 动态配置
    • 在需要根据不同环境进行动态配置的情况下,@Value 注解非常有用。可以将配置文件中的属性值注入到 Bean 中,实现灵活的配置。
  2. 参数化构造函数
    • 可以在构造函数参数上使用 @Value 注解,实现参数化的构造函数,根据配置文件中的值来创建 Bean。

八、@RequestMapping 注解

(一)处理 HTTP 请求

  1. 映射请求路径
    • @RequestMapping 注解用于将一个方法映射到特定的 HTTP 请求路径上。它可以用在类级别和方法级别上,用于定义控制器类和方法的请求映射。
  2. 支持多种 HTTP 方法
    • 可以通过 value 属性指定请求路径,通过 method 属性指定支持的 HTTP 方法(如 GET、POST、PUT、DELETE 等)。

(二)用法示例

  1. 类级别映射
    • 在控制器类上使用 @RequestMapping 注解,定义类级别的请求映射。例如:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class MyController {// 方法级别的请求映射将在此基础上进行
}

  1. 方法级别映射
    • 在控制器方法上使用 @RequestMapping 注解,定义具体的请求映射。例如:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class MyController {@RequestMapping(value = "/users", method = RequestMethod.GET)public List<User> getUsers() {// 返回用户列表}
}

九、@RestController 注解

(一)构建 RESTful API

  1. 标识控制器
    • @RestController 注解是 @Controller 和 @ResponseBody 的组合注解。它用于标识一个控制器类,该类中的方法将返回 JSON、XML 或其他格式的响应数据,用于构建 RESTful API。
  2. 自动序列化响应数据
    • 当一个方法被标注为 @RestController 注解的类中的方法返回一个对象时,Spring Boot 会自动将该对象序列化为 JSON 或其他格式的响应数据,并返回给客户端。

(二)与其他注解的配合

  1. 与 @RequestMapping 注解配合
    • @RestController 注解通常与 @RequestMapping 注解一起使用,用于定义 RESTful API 的请求映射和响应数据。
  2. 与 @Service、@Repository 等注解配合
    • 在构建复杂的应用程序时,@RestController 注解可以与其他注解(如 @Service、@Repository)配合使用,实现业务逻辑和数据访问的分离。

十、实际案例分析

(一)案例背景

假设有一个简单的博客应用,需要实现文章的管理功能,包括创建、读取、更新和删除文章。

(二)技术选型

  1. 使用 Spring Boot 构建应用
    • 选择 Spring Boot 作为开发框架,利用其快速开发、自动配置等优势。
  2. 数据库选择
    • 选择一个关系型数据库(如 MySQL)来存储文章数据。
  3. 前端框架选择
    • 可以选择一个前端框架(如 Vue.js 或 React)来构建用户界面,与后端的 Spring Boot 应用进行交互。

(三)核心注解的应用

  1. @SpringBootApplication 注解
    • 在主类上使用 @SpringBootApplication 注解,标识这是一个 Spring Boot 应用的主配置类。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class BlogApplication {public static void main(String[] args) {SpringApplication.run(BlogApplication.class, args);}
}

  1. @Configuration 注解
    • 创建一个配置类,使用 @Configuration 注解标识。在这个配置类中,可以定义 Bean 和进行其他配置。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;@Configuration
public class AppConfig {@Beanpublic JdbcTemplate jdbcTemplate() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/blogdb");dataSource.setUsername("root");dataSource.setPassword("password");return new JdbcTemplate(dataSource);}
}

  1. @Autowired 注解
    • 在服务类和控制器类中,使用 @Autowired 注解进行依赖注入。例如,在文章服务类中注入 JdbcTemplate:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class ArticleService {private final JdbcTemplate jdbcTemplate;@Autowiredpublic ArticleService(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void createArticle(Article article) {// 使用 jdbcTemplate 执行数据库插入操作}public Article getArticleById(int id) {// 使用 jdbcTemplate 执行数据库查询操作}// 其他方法
}

  1. @RequestMapping 注解和 @RestController 注解
    • 在控制器类中,使用 @RequestMapping 注解和 @RestController 注解定义 RESTful API 的请求映射。例如:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/articles")
public class ArticleController {private final ArticleService articleService;@Autowiredpublic ArticleController(ArticleService articleService) {this.articleService = articleService;}@RequestMapping(method = RequestMethod.POST)public void createArticle(Article article) {articleService.createArticle(article);}@RequestMapping(value = "/{id}", method = RequestMethod.GET)public Article getArticleById(@PathVariable int id) {return articleService.getArticleById(id);}// 其他方法
}

(四)效果评估

  1. 开发效率
    • 通过使用 Spring Boot 的核心注解,大大提高了开发效率。自动配置和依赖注入功能减少了手动配置的工作量,使得开发过程更加快捷。
  2. 代码可读性和可维护性
    • 注解的使用使得代码更加清晰易读,易于理解和维护。例如,通过 @RequestMapping 注解和 @RestController 注解,可以很容易地看出控制器类的作用和请求映射关系。
  3. 功能实现
    • 成功实现了博客应用的文章管理功能,包括创建、读取、更新和删除文章。通过 RESTful API 的方式,使得前端可以方便地与后端进行交互。

十一、总结

Spring Boot 的核心注解在开发过程中起着至关重要的作用。@SpringBootApplication、@Configuration、@EnableAutoConfiguration、@ComponentScan、@Autowired、@Value、@RequestMapping 和 @RestController 等注解分别在应用的配置、自动配置、组件扫描、依赖注入、属性注入、请求映射和构建 RESTful API 等方面发挥着重要作用。通过深入理解这些注解的功能和用法,并结合实际案例进行应用,可以提高开发效率,增强代码的可读性和可维护性,实现高效的 Java 开发。

相关文章:

Spring Boot 的核心注解

一、引言 Spring Boot 作为一种流行的 Java 开发框架&#xff0c;以其简洁高效的开发方式受到广泛关注。其中&#xff0c;核心注解在 Spring Boot 应用的开发中起着至关重要的作用。理解这些注解的含义和用法&#xff0c;对于充分发挥 Spring Boot 的优势至关重要。本文将深入剖…...

蓝桥杯备考——算法

一、排序 冒泡排序、选择排序、插入排序、 快速排序、归并排序、桶排序 二、枚举 三、二分查找与二分答案 四、搜索&#xff08;DFS&#xff09; DFS&#xff08;DFS基础、回溯、剪枝、记忆化&#xff09; 1.DFS算法&#xff08;深度优先搜索算法&#xff09; 深度优先搜…...

MutationObserver与IntersectionObserver的区别

今天主要是分享一下MutationObserver和IntersectionObserver的区别&#xff0c;希望对大家有帮助! MutationObserver 和 IntersectionObserver 的区别 MutationObserver 作用&#xff1a;用于监听 DOM 树的变动&#xff0c;包括&#xff1a;元素的属性、子元素列表或节点文本的…...

生产与配置

1.鲁滨孙克苏鲁经济 鲁滨孙克苏鲁经济是一种非常简单的自给自足的经济&#xff0c;劳动时间与休息时间总和为总的时间。 即 摘椰子的数量为劳动时间的函数 由于鲁滨孙喜欢椰子&#xff0c;厌恶劳动时间&#xff0c;因此无差异曲线表现为厌恶品的形态。 根据无差异曲线和生…...

Android Kotlin Flow 冷流 热流

在 Android 开发中&#xff0c;Flow 是 Kotlin 协程库的一部分&#xff0c;用于处理异步数据流的一个组件。本质上&#xff0c;Flow 是一个能够异步生产多个值的数据流&#xff0c;与 suspend 函数返回单个值的模式相对应。Flow 更类似于 RxJava 中的 Observable&#xff0c;但…...

订单日记助力“实峰科技”提升业务效率

感谢北京实峰科技有限公司选择使用订单日记&#xff01; 北京实峰科技有限公司&#xff0c;成立于2022年&#xff0c;位于北京市石景区&#xff0c;是一家以从事生产、销售微特电机、输配电及控制设备等业务为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提…...

如何安装和配置JDK17

教程目录 零、引言1、新特性概览2、性能优化3、安全性增强4、其他改进5、总结 一、下载安装二、环境配置三、测试验证 零、引言 JDK 17&#xff08;Java Development Kit 17&#xff09;是Java平台的一个重要版本&#xff0c;它带来了许多新特性和改进&#xff0c;进一步提升了…...

智能化温室大棚控制系统设计(论文+源码)

1 系统的功能及方案设计 本次智能化温室大棚控制系统的设计其系统整体结构如图2.1所示&#xff0c;整个系统在器件上包括了主控制器STC89C52&#xff0c;温湿度传感器DHT11&#xff0c;LCD1602液晶&#xff0c;继电器&#xff0c;CO2传感器&#xff0c;光敏电阻&#xff0c;按…...

面试题之---解释一下原型和原型链

实例化对象 和普调函数一样&#xff0c;只不过调用的时候要和new连用&#xff08;实例化&#xff09;&#xff0c;不然就是一个普通函数调用 function Person () {} const o1 new Person() //能得到一个空对象 const o2 Person() //什么也得不到&#xff0c;这就是普通的…...

【Leecode】Leecode刷题之路第46天之全排列

题目出处 46-全排列-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 46-全排列-官方解法 预备知识 回溯法&#xff1a;一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解…...

自动驾驶革命:从特斯拉到百度,谁将主宰未来交通?

内容概要 自动驾驶技术正在经历一个前所未有的革命性变化&#xff0c;各大企业纷纷抢占这一充满潜力的新市场。以特斯拉和百度为代表的行业巨头&#xff0c;正利用各自的优势在这一技术的赛道上展开激烈竞争。特斯拉凭借其在电动汽车和自动驾驶领域的前瞻性设计与不断革新的技…...

Python __str__()方法

在Python中&#xff0c;str() 方法是一个特殊的方法&#xff08;也称为魔术方法或双下方法&#xff09;&#xff0c;它定义了当对象需要被转换为字符串表示时应该如何做。 当你尝试打印对象&#xff08;使用 print() 函数&#xff09;或将对象插入到需要字符串表示的上下文中&…...

虚拟机的安装

添加映像文件 自动或者手动分配磁盘 添加密码 创建用户 创建快照...

HCIP快速生成树 RSTP

STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09;和RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;都是用于在局域网中消除环路的网络协议。 STP&#xff08;生成树协议&#xff09; 基本概念&#xff1a; ST…...

Python基础学习-05元组 tuple

目录 1、元组的定义 2、元组的切片和索引 3、元组的函数 4、二维元组 5、本节总结 1、元组的定义 • 基本上可以理解为一个不可改变的列表 • 元组没有列表那么常用&#xff0c;但是它的关键是不可改变性 • 使用() 定义一个元组 1&#xff09; T (1, 2, 3, 4, …...

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…...

c++基础28函数的类型

函数的类型 基本用法例子usingfucntion 基本用法 在C中&#xff0c;函数类型是指函数的签名&#xff0c;包括返回类型、参数类型以及参数的数量。函数类型可以用来声明函数指针、函数引用或者作为模板参数。 函数也可当成一种数据类型 函数指针&#xff1a; 函数指针可以指向…...

Elasticsearch(四):query_string查询介绍

query_string查询介绍 1 概述2 基本概念3 数据准备4 query_string查询示例4.1 基本查询4.2 复杂查询解析4.3 高级过滤解析4.4 模糊查询解析4.5 高亮查询解析4.6 分页查询解析 5 总结 大家好&#xff0c;我是欧阳方超&#xff0c;可以我的公众号“欧阳方超”&#xff0c;后续内容…...

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习&#xff0c;处处可用。 一切皆数据 Nu 管道使用结构化数据&#xff0c;你可以用同样的方式安全地选择&#xff0c;过滤和排序。停止解析字符串&#xff0c;开始解决问题。 强大的插件系统 具备强…...

Vue禁止打开控制台/前端禁止打开控制台方法/禁用F12/禁用右键

代码片段展示了如何在前端页面中禁用右键菜单、禁止文本选择、阻止特定键盘操作&#xff08;如F12键打开开发者工具&#xff09;&#xff0c;以及通过检测窗口尺寸变化来尝试阻止用户调试页面。 // 鼠标禁止右键禁止打开控制台及键盘禁用forbidden(){// 1.禁用右键菜单document…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...