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
英文地址,請注明出處:http://en.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…