在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

對Spring中常用注解的原理進行剖析

冬至子 ? 來源:good7ob ? 作者:good7ob ? 2023-06-06 16:11 ? 次閱讀

Spring 框架作為 Java 領域廣泛使用的企業級框架,憑借其簡潔優雅的編程方式,以及豐富的功能和生態,一直備受開發者們的喜愛。

在 Spring 框架中,注解是實現代碼簡潔、模塊化、可配置的關鍵技術之一。

本文將對 Spring 中常用注解的原理進行剖析,并通過實際案例展示如何使用這些注解。

一、注解原理簡介

  • 在 Java 編程中,注解是一種元數據,用于向編譯器和運行時環境提供額外的信息
  • Spring 框架利用 Java 的注解機制,實現了依賴注入(DI)、面向切面編程(AOP)、聲明式事務管理等功能,大大簡化了 Java 企業級應用的開發。
  • 在 Spring 中,注解的原理主要涉及到三個方面:
  1. 注解定義:通過 Java 提供的 @interface 語法定義注解。
  2. 注解使用:將定義好的注解應用到類、方法、字段等地方。
  3. 注解解析:通過反射機制,在運行時讀取注解的信息,并根據注解的定義來執行相應的邏輯。

接下來,我們將針對 Spring 中常用的幾個注解,詳細剖析其原理。

二、常用注解剖析

1,@Component

@Component 注解是 Spring 中用于標識一個類作為組件的注解,這意味著 Spring 容器會自動掃描到這個類,并將其實例化為一個 Bean。

@Component 注解是 @Service@Controller@Repository 注解的基礎注解。

原理剖析

  • 當 Spring 容器啟動時,會通過 ClassPathScanningCandidateComponentProvider 類掃描類路徑下的所有類,然后檢查這些類上是否有 @Component 注解。
  • 如果有,Spring 容器會將這個類實例化為一個 Bean,并加入到 IoC 容器中。

實際案例

@Component
public class UserService {
   //...
}

上述代碼中,UserService 類被標記為一個組件,Spring 容器會自動創建并管理一個 UserService 的實例。

2,@Autowired

@Autowired 注解用于自動裝配 Bean 之間的依賴關系。它可以應用在字段、構造方法和普通方法上。

原理剖析

  • Spring 容器在創建 Bean 實例后,會通過 AutowiredAnnotationBeanPostProcessor 類處理 @Autowired 注解。
  • 具體而言,它會查找與被注解字段或方法參數類型匹配的 Bean,并自動注入相應的依賴。

實際案例

@Component
public class UserController {
   private UserService userService;
   @Autowired
   public UserController(UserService userService) {
       this.userService = userService;
  }
}

上述代碼中,UserController 中的 userService 字段被 @Autowired 注解修飾,Spring 容器會自動注入一個 UserService 的實例。

3,@RequestMapping

@RequestMapping 注解用于將 HTTP 請求映射到控制器的處理方法上。它可以應用在類和方法上,用于處理不同的 URL 請求。

原理剖析

  • Spring 容器在啟動時,會掃描所有標注有 @Controller 注解的類,并解析其中所有的 @RequestMapping 注解。
  • 當接收到一個 HTTP 請求時,Spring 容器會根據請求的 URL 和請求方法,找到對應的處理方法,并執行相應的業務邏輯。

實際案例

@Controller
@RequestMapping("/user")
public class UserController {
   @RequestMapping("/login")
   public String login() {
       //...
  }
}

上述代碼中,UserController 類被標注為一個控制器,@RequestMapping 注解指定了 /user 路徑。login() 方法被 @RequestMapping 注解修飾,用于處理 /user/login 的請求。

4,@Transactional

@Transactional 注解用于聲明式事務管理,它可以應用在類和方法上。

當一個方法被標記為 @Transactional 注解時,Spring 容器會在方法執行前開啟一個事務,并在方法執行后根據執行結果提交或回滾事務。

原理剖析

Spring 的事務管理是基于 AOP 技術實現的。當一個類或方法被標記為 @Transactional 注解時,Spring 容器會通過 TransactionInterceptor 類生成一個代理對象,將事務邏輯織入到代理對象的方法中。

實際案例

@Service
public class UserService {
   @Autowired
   private UserDao userDao;
   @Transactional
   public void updateUser(User user) {
       userDao.updateUser(user);
  }
}

上述代碼中,UserService 類中的 updateUser() 方法被 @Transactional 注解修飾,Spring 容器會在方法執行前開啟一個事務,并在方法執行后根據執行結果提交或回滾事務。

三、注解的優點

注解作為一種元數據,具有以下優點:

  1. 簡化配置:注解可以將配置信息直接寫在代碼中,而不需要繁瑣的 XML 配置或屬性文件配置。
  2. 可讀性強:注解將元數據直接寫在代碼中,使得代碼更加易讀、易懂。
  3. 可重用性強:通過注解,可以將相同的元數據應用于不同的類、方法或字段,提高了代碼的可重用性。
  4. 面向切面編程:注解在 AOP 中發揮了重要作用,可以方便地將切面邏輯織入到方法中,從而實現面向切面編程。

四、總結

  • 本文針對 Spring 框架中常用的幾個注解進行了原理剖析,并通過實際案例展示了如何使用這些注解。
  • 注解作為一種元數據,具有簡化配置、可讀性強、可重用性強、面向切面編程等優點,是 Java 開發中不可或缺的一部分。
  • 在實際開發中,合理使用注解可以讓代碼更加簡潔、易讀、易維護。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16361

    瀏覽量

    178071
  • JAVA
    +關注

    關注

    19

    文章

    2967

    瀏覽量

    104758
  • URL
    URL
    +關注

    關注

    0

    文章

    139

    瀏覽量

    15341
  • AOP
    AOP
    +關注

    關注

    0

    文章

    40

    瀏覽量

    11102
  • XML技術
    +關注

    關注

    0

    文章

    15

    瀏覽量

    6011
收藏 人收藏

    評論

    相關推薦

    Spring Boot如何實現異步任務

    ,用來告訴 Spring 這個方法是一個異步方法,Spring 會將這個方法的執行放在異步線程中進行。使用 @Async 注解需要滿足以下條件: 需要在
    的頭像 發表于 09-30 10:32 ?1441次閱讀

    使用Spring自定義注解的實現

    執行器。其本質就是通過外部參數進行一次路由和Spring mvc做的事情類似。簡單看了Spring mvc的實現原理之后,決定使用自定義注解的方式來實現以上功能。 自定義TaskHan
    發表于 09-28 11:55 ?0次下載

    Spring應用 1 springXML配置說明

    開發過程。會使用注解形式的開發模式。但使用相應的注解需要spring.xml中定義相應的BeanProcessor,這樣顯得很笨重。 使用@Autowired注解,必須事先在
    發表于 01-13 12:20 ?389次閱讀

    Spring Boot常用注解與使用方式

    企業開發項目SpringBoot已經是必備框架了,其中注解是開發中的小工具(誰處可見哦),用好了開發效率大大提升,當然用錯了也會引入缺陷。
    的頭像 發表于 07-08 10:57 ?1373次閱讀

    淺談Spring事務底層原理

    開啟Spring事務本質上就是增加了一個Advisor,但我們使用@EnableTransactionManagement注解來開啟Spring事務是,該注解代理的功能就是向
    的頭像 發表于 12-06 09:56 ?697次閱讀

    Spring Web MVC注解

    RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射。Spring MVC和Spring WebFlux都通過`RquestMappingHandler
    的頭像 發表于 04-07 11:32 ?601次閱讀
    <b class='flag-5'>Spring</b> Web MVC<b class='flag-5'>注解</b>

    Spring Bean相關的4個注解及使用方法

    ComponentScan`注解用于配置Spring需要掃描的被組件注解注釋的類所在的包。可以通過配置其basePackages屬性或者value屬性來配置需要掃描的包路徑。value屬性是basePackages的別名。此
    的頭像 發表于 04-07 11:33 ?1350次閱讀
    <b class='flag-5'>Spring</b> Bean相關的4個<b class='flag-5'>注解</b>及使用方法

    Spring Dependency Inject與Bean Scops注解

    DependsOn`注解可以配置Spring IoC容器在初始化一個Bean之前,先初始化其他的Bean對象。下面是此注解使用示例代碼:
    的頭像 發表于 04-07 11:35 ?696次閱讀
    <b class='flag-5'>Spring</b> Dependency Inject與Bean Scops<b class='flag-5'>注解</b>

    容器配置及Spring Boot注解

    Autowired注解用于標記Spring將要解析和注入的依賴項。此注解可以作用在構造函數、字段和setter方法上。
    的頭像 發表于 04-07 11:45 ?579次閱讀
    容器配置及<b class='flag-5'>Spring</b> Boot<b class='flag-5'>注解</b>

    Spring中@Component注解是怎么實現的

    想必`@Component`注解大家一直在使用,只要類上加上它,就可以被Spring容器管理,那大家有想過它是怎么實現的嗎?本篇文章就帶領到家揭秘。
    的頭像 發表于 04-07 15:23 ?1590次閱讀
    <b class='flag-5'>Spring</b>中@Component<b class='flag-5'>注解</b>是怎么實現的

    JAVA中注解是怎么做到的(上)

    注解想必大家在項目中經常使用,比如Spring框架中常用的一些注解:`@Controller`、`@Service`、`@RequestMapping`等等,它是JDK1.5及以后版本
    的頭像 發表于 05-11 10:57 ?645次閱讀

    JAVA中注解是怎么做到的(下)

    注解想必大家在項目中經常使用,比如Spring框架中常用的一些注解:`@Controller`、`@Service`、`@RequestMapping`等等,它是JDK1.5及以后版本
    的頭像 發表于 05-11 10:57 ?572次閱讀
    JAVA中<b class='flag-5'>注解</b>是怎么做到的(下)

    springmvc常用5種注解

    SpringMVC是一種基于Java的Web框架,使用注解可以更加方便靈活地開發和管理控制器,實現請求的映射和處理。在SpringMVC中,有許多常用注解,本文將詳細介紹其中的五種注解
    的頭像 發表于 11-22 16:51 ?901次閱讀

    springboot核心注解

    Spring Boot 是基于 Spring 框架的開源框架,它可以幫助開發者快速構建、部署和運行獨立的、生產級的 Spring 應用程序。Spring Boot 提供了一系列核心
    的頭像 發表于 11-23 09:23 ?526次閱讀

    SpringBoot核心注解由幾個注解組成

    Spring Boot 是一個開源的 JavaEE 開發框架,它以簡化 Spring 框架的配置與開發為目標,旨在讓開發者能快速構建獨立、生產級別的應用程序。Spring Boot 提供了大量用于
    的頭像 發表于 12-03 15:09 ?760次閱讀
    主站蜘蛛池模板: 开心丁香婷婷深爱五月 | 欧美在线视频看看 | 日本三级人妇 | 97成人在线视频 | 午夜神马嘿嘿 | 国产一区在线播放 | 欧美一级在线免费观看 | 国产免费一区二区三区香蕉精 | 欧美影院入口 | 国产伦精一区二区三区 | 香港午夜理理伦_级毛片 | 欧美午夜寂寞影院安卓列表 | 综合激情网站 | 男人j桶女人j免费视频 | 男人的天堂一区二区视频在线观看 | 久久久久久天天夜夜天天 | 人人干国产 | 午夜精品久久久久久久四虎 | 日本黄色片黄色片 | 欧美xxxx日本| 欧美一区二区在线观看视频 | 高清欧美性xxxx成熟 | 亚洲一区二区三区四 | 一级不卡毛片 | 国内外精品免费视频 | 最新黄色免费网站 | 国产色av| xxxx69日本hd | 男啪女r18肉车文 | 四虎影院在线免费观看 | 天天拍拍天天爽免费视频 | 日本不卡在线观看免费v | 女人的天堂网站 | 国产精品看片 | 天天毛片| 天天干影院| 黄色自拍偷拍 | 操女人视频网站 | 国产中文字幕一区 | 日韩欧美一卡二区 | 天堂网在线新版www 天堂网在线资源 |