Spring Boot常用注解-详细解析+示例

1. @SpringBootApplication

  • 详细解析
    组合注解,包含@Configuration(标记配置类)、@EnableAutoConfiguration(开启自动配置)、@ComponentScan(组件扫描)。启动类标注后,Spring Boot 会自动完成组件扫描、配置类加载和自动配置逻辑。
  • 注意事项
    通常放在项目根包下(如com.example.demo),确保@ComponentScan能扫描到所有子包中的组件。若需自定义扫描范围,可通过scanBasePackages属性指定。
  • 示例
@SpringBootApplication(scanBasePackages = "com.example.service")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
  • 对比
    @Configuration的区别:@SpringBootApplication是更高层次的封装,包含自动配置和组件扫描,而@Configuration仅标记配置类。

2. @Controller

  • 详细解析
    标记类为 Spring MVC 控制器,负责接收 HTTP 请求并返回视图(如 JSP、Thymeleaf 模板)或通过@ResponseBody返回数据。
  • 注意事项
    需配合@RequestMapping等注解映射请求路径,单独使用时返回的是视图名称,需依赖视图解析器。
  • 示例
@Controller
@RequestMapping("/pages")
public class PageController {@GetMapping("/home") // 返回home.html视图public String home() {return "home"; }
}
  • 对比
    @RestController的区别:@RestController = @Controller + @ResponseBody,默认返回数据(如 JSON)而非视图;@Controller需显式添加@ResponseBody才返回数据。

3. @RestController

  • 详细解析
    专为 RESTful API 设计,方法返回值会直接作为 HTTP 响应体(默认序列化为 JSON),无需额外添加@ResponseBody
  • 注意事项
    无法返回视图(如 HTML 页面),适合纯数据接口开发。
  • 示例
@RestController
@RequestMapping("/api/users")
public class UserApiController {@GetMapping // 返回JSON数据public List<User> getUsers() {return Arrays.asList(new User(1, "Alice"));}
}
  • 对比
    @Controller的区别:核心差异在返回值处理(视图 vs 数据)。

4. @RequestMapping

  • 详细解析
    基础请求映射注解,可用于类或方法,支持指定 URL 路径、HTTP 方法(GET/POST 等)、请求参数、请求头、媒体类型等。
  • 注意事项
    Spring 4.3 + 推荐使用更具体的@GetMapping@PostMapping等注解,避免重复指定method属性。
  • 示例
@RequestMapping(value = "/users", method = RequestMethod.GET, params = "type=admin")
public List<User> getAdminUsers() {// 仅处理带type=admin参数的GET请求
}
  • 对比
    @GetMapping等的区别:@RequestMapping是通用注解,需显式指定method;而@GetMapping等是简化版,已固化 HTTP 方法。

5. @GetMapping

  • 详细解析
    @RequestMapping(method = RequestMethod.GET)的快捷注解,专门处理 HTTP GET 请求,用于查询资源。
  • 注意事项
    适合读取数据,幂等(多次请求结果一致)且不应修改资源状态。
  • 示例
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {return userService.findById(id);
}
  • 对比
    @PostMapping的区别:@GetMapping用于查询,@PostMapping用于创建资源;@GetMapping参数暴露在 URL 中,@PostMapping参数在请求体中。

6. @PostMapping

  • 详细解析
    @RequestMapping(method = RequestMethod.POST)的快捷注解,用于处理 HTTP POST 请求,适合创建新资源。
  • 注意事项
    非幂等(多次请求可能创建多个资源),参数通常放在请求体中(如 JSON)。
  • 示例
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {User saved = userService.save(user);return ResponseEntity.status(201).body(saved);
}
  • 对比
    @PutMapping的区别:@PostMapping用于创建资源(URL 通常不包含 ID),@PutMapping用于全量更新(URL 包含 ID)。

7. @PutMapping

  • 详细解析
    处理 HTTP PUT 请求,用于全量更新资源(需提供资源的完整信息)。
  • 注意事项
    幂等(多次请求结果一致),通常要求客户端提交资源的完整数据。
  • 示例
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {return userService.update(id, user); // 覆盖整个用户信息
}
  • 对比
    @PatchMapping的区别:@PutMapping用于全量更新,@PatchMapping用于部分更新(仅提交需要修改的字段)。

8. @DeleteMapping

  • 详细解析
    处理 HTTP DELETE 请求,用于删除资源。
  • 注意事项
    幂等,删除后再次请求应返回 404(资源不存在)。
  • 示例
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {userService.delete(id);return ResponseEntity.noContent().build();
}

9. @PatchMapping

  • 详细解析
    处理 HTTP PATCH 请求,用于部分更新资源(仅修改指定字段)。
  • 注意事项
    非幂等(如递增计数器操作),请求体通常包含部分字段。
  • 示例
@PatchMapping("/users/{id}")
public User updateUserName(@PathVariable Long id, @RequestBody Map<String, String> updates) {return userService.updateField(id, "name", updates.get("name"));
}
  • 对比
    @PutMapping的区别:如上述,核心是部分更新 vs 全量更新。

10. @PathVariable

  • 详细解析
    绑定 URL 路径中的变量到方法参数,支持单个参数或复杂对象(需配合@ModelAttribute)。
  • 注意事项
    若参数名与 URL 占位符不一致,需通过value指定(如@PathVariable("userId") Long id)。
  • 示例
@GetMapping("/users/{userId}/orders/{orderId}")
public Order getOrder(@PathVariable("userId") Long uId, @PathVariable Long orderId
) {return orderService.findByUserAndOrder(uId, orderId);
}
  • 对比
    @RequestParam的区别:@PathVariable获取 URL 路径中的参数(如/users/1中的 1),@RequestParam获取查询参数(如/users?page=1中的 page)。

11. @RequestParam

  • 详细解析
    绑定 HTTP 请求参数(查询字符串或表单数据)到方法参数,支持设置是否必填、默认值等。
  • 注意事项
    对于非基本类型参数(如自定义对象),需配合@ModelAttribute使用。
  • 示例
@GetMapping("/users")
public List<User> getUsers(@RequestParam(required = false, defaultValue = "0") int page,@RequestParam(required = false, defaultValue = "10") int size
) {return userService.findPage(page, size);
}
  • 对比
    @RequestBody的区别:@RequestParam处理 URL 查询参数或表单数据,@RequestBody处理请求体中的数据(如 JSON)。

12. @RequestBody

  • 详细解析
    将 HTTP 请求体(如 JSON/XML)转换为方法参数对象,依赖消息转换器(如 Jackson)实现序列化。
  • 注意事项
    仅支持 POST/PUT/PATCH 等包含请求体的方法,GET 请求无请求体,使用会报错。
  • 示例
@PostMapping("/users")
public User createUser(@RequestBody @Valid User user) { // @Valid用于参数校验return userService.save(user);
}
  • 对比
    @RequestParam的区别:如上述,核心是请求体 vs 查询参数。

13. @ResponseBody

  • 详细解析
    将方法返回值直接作为 HTTP 响应体(如 JSON),跳过视图解析器。
  • 注意事项
    @RestController已包含此注解,无需重复添加。
  • 示例
@Controller
public class DataController {@GetMapping("/api/data")@ResponseBody // 返回JSON而非视图public Map<String, String> getData() {return Collections.singletonMap("key", "value");}
}

14. @RequestHeader

  • 详细解析
    绑定 HTTP 请求头信息到方法参数,如User-AgentContent-Type等。
  • 注意事项
    若请求头不存在且未设置默认值,会抛出MissingRequestHeaderException
  • 示例
@GetMapping("/headers")
public String getHeaders(@RequestHeader("User-Agent") String userAgent,@RequestHeader(value = "Accept", defaultValue = "*/*") String accept
) {return "User-Agent: " + userAgent;
}

15. @CookieValue

  • 详细解析
    绑定请求中的 Cookie 值到方法参数,可获取客户端存储的 Cookie 信息。
  • 注意事项
    若 Cookie 不存在且required = true,会抛出异常。
  • 示例
@GetMapping("/session")
public String getSessionId(@CookieValue("JSESSIONID") String sessionId) {return "Session ID: " + sessionId;
}

16. @Component

  • 详细解析
    通用组件注解,标记类为 Spring 管理的 Bean,由 Spring 自动扫描并实例化。
  • 注意事项
    @Service@Repository@Controller的父注解,通常优先使用更具体的注解以提高代码可读性。
  • 示例
@Component // 通用组件,如工具类
public class DateUtils {public String format(Date date) {return new SimpleDateFormat("yyyy-MM-dd").format(date);}
}
  • 对比
    @Service的区别:@Component是通用注解,@Service专为业务逻辑层设计,语义更明确。

17. @Service

  • 详细解析
    继承自@Component,标记类为业务逻辑层组件,Spring 会自动扫描并注入依赖。
  • 注意事项
    事务管理(@Transactional)通常应用于@Service标注的类,确保业务操作的原子性。
  • 示例
@Service
public class UserServiceImpl implements UserService {private final UserRepository userRepository;@Autowiredpublic UserServiceImpl(UserRepository userRepository) {this.userRepository = userRepository;}
}
  • 对比
    @Repository的区别:@Service处理业务逻辑,@Repository处理数据访问;@Repository会自动转换数据库异常为 Spring 统一的DataAccessException

18. @Repository

  • 详细解析
    继承自@Component,标记类为数据访问层(DAO)组件,负责与数据库交互。
  • 注意事项
    Spring 会为其添加异常转换器,将 JDBC/Hibernate 等原生异常转换为DataAccessException
  • 示例
@Repository
public class UserRepositoryImpl implements UserRepository {@Overridepublic User findById(Long id) {// 数据库查询逻辑}
}

19. @Autowired

  • 详细解析
    自动注入 Spring 容器中的 Bean,支持构造函数、字段、setter 方法注入,默认按类型匹配。
  • 注意事项
    • 构造函数注入是推荐方式(便于测试且强制依赖);
    • 若存在多个同类型 Bean,需配合@Qualifier指定名称;
    • Spring 4.3 + 对单个构造函数的类,可省略@Autowired
  • 示例
@Service
public class OrderService {private final UserService userService;// 构造函数注入(推荐)@Autowiredpublic OrderService(UserService userService) {this.userService = userService;}
}
  • 对比
    @Resource的区别:
    • @Autowired默认按类型注入,@Resource默认按名称注入;
    • @Autowired是 Spring 注解,@Resource是 JSR-250 规范注解;
    • @Autowired可配合@Qualifier指定名称,@Resource通过name属性指定。

20. @Qualifier

  • 详细解析
    @Autowired配合使用,当存在多个同类型 Bean 时,通过名称指定要注入的 Bean。
  • 注意事项
    value属性必须与目标 Bean 的名称一致(默认是类名首字母小写)。
  • 示例
@Service
public class PaymentService {@Autowired@Qualifier("alipayProcessor") // 指定注入alipayProcessorprivate PaymentProcessor processor;
}// 两个同类型Bean
@Service("alipayProcessor")
public class AlipayProcessor implements PaymentProcessor { ... }@Service("wechatProcessor")
public class WechatProcessor implements PaymentProcessor { ... }

21. @Resource

  • 详细解析
    JSR-250 规范注解,用于依赖注入,默认按名称匹配,名称可通过name属性指定,若名称不匹配则按类型匹配。
  • 注意事项
    不支持required属性(默认必须存在,否则报错),需确保容器中存在匹配的 Bean。
  • 示例
@Service
public class CartService {@Resource(name = "userRepository") // 按名称注入private UserRepository userRepo;
}

22. @Configuration

  • 详细解析
    标记类为配置类,替代传统 XML 配置文件,内部可通过@Bean定义 Bean。
  • 注意事项
    配置类本身也是 Bean,可被@Autowired注入;@SpringBootApplication已包含此注解。
  • 示例
@Configuration
public class AppConfig {@Bean // 定义Bean,名称默认是方法名public RestTemplate restTemplate() {return new RestTemplate();}
}
  • 对比
    @Component的区别:@Configuration用于定义 Bean 配置,@Component用于标记被管理的组件;@Configuration中的@Bean方法会被 CGLIB 代理,确保单例性。

23. @Bean

  • 详细解析
    用于@Configuration类中,定义一个 Bean,Spring 会将方法返回值纳入容器管理。
  • 注意事项
    • 默认 Bean 名称是方法名,可通过name属性指定;
    • 支持initMethoddestroyMethod指定初始化和销毁方法。
  • 示例
@Configuration
public class DatabaseConfig {@Bean(name = "dataSource", destroyMethod = "close")public DataSource dataSource() {HikariConfig config = new HikariConfig();// 配置数据源return new HikariDataSource(config);}
}

24. @Value

  • 详细解析
    注入外部配置值(如application.properties中的属性)到字段或方法参数,支持 SpEL 表达式。
  • 注意事项
    对于复杂配置,推荐使用@ConfigurationProperties而非多个@Value
  • 示例
@Component
public class AppProperties {@Value("${app.name}") // 注入application.properties中的app.nameprivate String appName;@Value("#{T(java.lang.Math).random() * 100}") // SpEL表达式private double randomValue;
}
  • 对比
    @ConfigurationProperties的区别:
    • @Value适合单个属性注入,@ConfigurationProperties适合批量绑定(如前缀相同的属性);
    • @ConfigurationProperties支持类型转换和校验,@Value需手动处理。

25. @ConfigurationProperties

  • 详细解析
    将外部配置(如application.yml)批量绑定到 Bean 的字段,通常配合prefix指定属性前缀。
  • 注意事项
    需要添加@Component或在@Configuration类中通过@EnableConfigurationProperties启用。
  • 示例
# application.yml
app:name: MyAppversion: 1.0.0server:port: 8080
@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {private String name;private String version;private ServerConfig server; // 嵌套对象// getter/setterpublic static class ServerConfig {private int port;// getter/setter}
}

26. @Transactional

  • 详细解析
    声明事务管理,确保方法内的操作要么全部成功,要么全部回滚,支持设置隔离级别、传播行为等。
  • 注意事项
    • 仅对public方法有效;
    • 自调用(同一类中方法调用)不会触发事务,需通过 AOP 代理调用;
    • 默认只回滚RuntimeException及其子类。
  • 示例
@Service
public class OrderService {@Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)public void createOrder(Order order) {// 数据库操作1// 数据库操作2}
}

27. @CrossOrigin

  • 详细解析
    解决跨域请求问题,允许指定来源、方法、 headers 等跨域参数。
  • 注意事项
    可用于类或方法,方法级注解会覆盖类级注解;生产环境需限制origins避免安全风险。
  • 示例
@RestController
@CrossOrigin(origins = "https://example.com", methods = {GET, POST})
public class ApiController {@GetMapping("/data")public String getData() {return "cross-origin data";}
}

28. @Validated

  • 详细解析
    开启方法参数校验(基于 JSR-303/JSR-380 规范),配合@Valid使用,支持分组校验。
  • 注意事项
    需添加依赖(如spring-boot-starter-validation),校验失败会抛出MethodArgumentNotValidException
  • 示例
@RestController
@Validated // 类级别开启校验
public class UserController {@PostMapping("/users")public User createUser(@Valid @RequestBody User user) { // @Valid触发校验return userService.save(user);}
}// 实体类
public class User {@NotNull(message = "ID不能为空")private Long id;@Size(min = 2, max = 20, message = "姓名长度必须在2-20之间")private String name;
}

29. @Profile

  • 详细解析
    标记 Bean 或配置类仅在特定环境(如 dev/test/prod)下生效,通过spring.profiles.active指定激活的环境。
  • 注意事项
    可指定多个环境(如@Profile({"dev", "test"})),!dev表示排除 dev 环境。
  • 示例:
@Configuration
public class DataSourceConfig {@Bean@Profile("dev") // 仅dev环境生效public DataSource devDataSource() {// 开发环境数据源}@Bean@Profile("prod") // 仅prod环境生效public DataSource prodDataSource() {// 生产环境数据源}
}

30. @Conditional

  • 详细解析
    基于条件判断是否创建 Bean,需配合条件类(实现Condition接口)使用,Spring Boot 提供了多种派生注解(如@ConditionalOnClass@ConditionalOnMissingBean)。
  • 注意事项
    条件判断在 Bean 创建前执行,常用于自动配置逻辑。
  • 示例
@Configuration
public class RedisConfig {@Bean@ConditionalOnClass(RedisTemplate.class) // 当RedisTemplate类存在时创建Bean@ConditionalOnMissingBean // 当容器中不存在该类型Bean时创建public RedisTemplate<String, Object> redisTemplate() {return new RedisTemplate<>();}
}

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

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

相关文章

基于原神游戏物品系统小demo制作思路

概述 本文介绍了一个基于C的游戏物品与角色管理系统&#xff0c;该系统实现了游戏中的物品分类、角色属性管理、队伍组建以及背包物品使用等功能。该系统采用面向对象的设计原则&#xff0c;通过继承和多态实现了可扩展的物品效果系统。 系统架构 1. 物品类型系统 系统定义了三…

Grounded-Segment-Anything 环境配置

Grounded-Segment-Anything 环境配置Grounded-Segment-Anything 介绍环境配置Install osx&#xff08;非必须&#xff09;:Install RAM & Tag2Text:报错 module ‘pkgutil‘ has no attribute ‘ImpImporter‘. Did you mean: ‘zipimporter‘?运行输出分割文本提示检测远…

ZYNQ 定时器

一、ZYNQ定时器简介 每个Cortex-A9处理器都有自己的专用32位定时器和32位看门狗定时器。两个处理器共享一个全局64位定时器。这些计时器的时钟始终为CPU频率&#xff08;CPU_3x2x&#xff09;的1/2。在系统级&#xff0c;有一个24位看门狗定时器和两个16位三重定时器/计数器。系…

Java8 Comparator接口 和 List Steam 排序使用案例

在Java中&#xff0c;Comparator接口主要用于实现自定义排序逻辑&#xff0c;适用于未实现Comparable接口或需要覆盖默认比较规则的场景。以下是核心使用方法和注意事项&#xff1a;一、基础用法‌匿名内部类实现‌传统方式通过匿名内部类重写compare()方法&#xff0c;例如对整…

word2vec模型案例

代码实现&#xff1a;import torch.optim as optim from tqdm import tqdm, trange import numpy as np import torch from torch import nn import torch.nn.functional as FCONTEXT_SIZE 2raw_text """We are about to study the idea of a computational p…

< 自用文 OS 有关 > (续)发现正在被攻击 后的自救 Fail2ban + IPset + UFW 工作流程详解

继上编&#xff1a;&#xff1c; 自用文 主机 USC 记录&#xff1a;&#xff1e; 发现正在被攻击 后的自救-CSDN博客 环境&#xff1a; 改进&#xff1a; 以下是把代码&#xff0c;懒得写&#xff0c;扔给了 AI &#xff0c;让它出的&#xff1a; Fail2ban IPset UFW 工作…

Linux —— 虚拟进程地址空间

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录虚…

简单聊一聊js

JavaScript 是一种高级的、解释型的编程语言。它是现代 Web 开发的三大核心基石之一&#xff0c;与 HTML 和 CSS 并列。​HTML​&#xff1a;负责网页的结构和内容​&#xff08;如标题、段落、图片&#xff09;。​CSS​&#xff1a;负责网页的样式和布局​&#xff08;如颜色…

造粒机cad+设计说明书

摘要 随着现代化工业的快速发展&#xff0c;生产出大量的固体废弃物。这些废弃物对环境造成了很大的污染&#xff0c;因此需要采取有效的措施进行处理。机械强压式造粒机就是一种非常有效的处理工具&#xff0c;它可以将废渣、废料、饲料和化肥等材料通过机械强力挤压&#xff…

第五课 C#语言基本元素概览,初始类型,变量与方法,算法简介

熟悉C#语言要求&#xff1a;对构成C#语言的基本元素&#xff0c;随便拿出一个你都认识&#xff0c;对于常见基本元素&#xff0c;都能正确使用它 精通C#语言要求&#xff1a;对于构成C#语言的基本元素&#xff0c;随便拿出一个都会使用&#xff0c;对于常用基本元素&#xff0…

LLM学习:大模型基础——视觉大模型以及autodl使用

1、常见的VLM 在大模型中,VLM 是视觉语言模型(Vision-Language Model)的缩写,是一种多模态、生成式 AI 模型,能够理解和处理视频、图像和文本。 VLM 通过将大语言模型(LLM)与视觉编码器相结合构建而成,使 LLM 具有 “看” 的能力,从而可以处理并提供对提示中的…

Vue—路由配置中设置了meta.title,但页面标题仍然显示为“Vite App“?【让我来看看~】

路由配置中明明设置了meta.title&#xff0c;但是页面标题仍然显示为"Vite App"&#xff1f;这是因为仅仅在路由配置中设置meta.title是不够的&#xff0c;还需要在路由守卫中动态设置页面标题。需要做以下几件事来正确设置页面标题&#xff1a;1.首先更新HTML文件的…

【机器学习】综合实训(二)

项目五 电影评分预测【教学内容】使用 MovieLens 数据集&#xff0c;训练一个模型预测用户对电影的评分。主要有以下几个知识点&#xff1a;&#xff08;1&#xff09;数据加载与探索性分析&#xff08;EDA&#xff09;。&#xff08;2&#xff09;处理稀疏数据&#xff08;如用…

STM32 UART + DMA + 空闲中断使用中的帧错误(FE)问题及解决方案

STM32 UART + DMA + IDLE中断使用中的帧错误(FE)问题及解决方案 在我调试STM32H7串口空闲中断DMA接受时遇到了一个bug,这个现象发生在系统刚上电时,有个串口由于帧错误FE挂起了中断,之后在HAL_UART_IRQHandler这个全局中断处理函数结束后,所有的中断使能标志位都被清除了,经过…

TDengine 选择函数 BOTTOM() 用户手册

BOTTOM() 函数用户手册 函数定义 BOTTOM(expr, k)功能说明 BOTTOM() 函数统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样&#xff0c;全部取用又会超出 k 条限制时&#xff0c;系统会从相同值中随机选取符合要求的数量返回。 返回值 数据类型: 同应用…

西门子 S7-200 SMART PLC 实现星三角降压启动控制:原理、案例与完整程序

在工业控制场景中&#xff0c;中型异步电机直接启动时会产生远超额定电流的冲击电流&#xff08;通常为额定电流的 5-7 倍&#xff09;&#xff0c;不仅会影响电网稳定性&#xff0c;还可能对机械设备造成损伤。星三角&#xff08;Y-Δ&#xff09;降压启动是解决这一问题的经典…

【Android】View 的基础知识

【Android】View 的基础知识 1. 什么是 View&#xff1f; View 是 Android 中所有UI组件的基础类。它表示屏幕上的一个矩形区域&#xff0c;负责绘制内容和处理用户交互事件。所有的 UI 组件&#xff08;如按钮、文本框等&#xff09;都是 View 的子类&#xff0c;而 ViewGroup…

西门子 S7-200 SMART PLC 实现电机点动与连续运行综合控制

在工业生产中&#xff0c;电机控制并非单一模式&#xff1a;调试设备时需要 “按动即转、松开即停” 的点动功能&#xff0c;正常生产时则需要 “一键启动、持续运行” 的连续控制。本文以西门子 S7-200 SMART PLC 为载体&#xff0c;详细讲解电机点动控制原理&#xff0c;并设…

如何解决pip安装报错ModuleNotFoundError: No module named ‘sphinx-rtd-theme’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘sphinx-rtd-theme’问题 摘要 在使用 PyCharm 开发 Python 项目时&#xff0c;pip install 报错是常见痛点。特别是在构建文档或引入第三方库时&#xff0c;开…

HakcMyVM-Literal

目录信息搜集漏洞利用权限提升信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.21.0/24 Nmap scan report for 192.168.21.5端口扫描 ┌──(kali㉿kali)-[~] └─$ nmap -sS -sV -O -p- 192.168.21.5 Starting Nmap 7.95 ( https://nmap.org ) a…