欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

@Component、@Service、@Repository、@Controller的源碼有區(qū)別嗎

所以從源碼上來講,@Component、@Service、@Repository、@Controller沒有任何區(qū)別對嗎?

非常接近了!你說的基本對,但還有一點點關鍵的差異,主要體現在:

從源碼實現上看,它們本質上都是@Component的"派生注解",所以它們最終都會被Spring掃描成 Bean,沒有區(qū)別。

但——在一些具體功能實現上,Spring對這些注解確實會做一些"額外處理",這就引出了它們的區(qū)別。

? 首先看它們的源碼結構(全都繼承自@Component)

來看每個注解的源碼:

@Component

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {
    String value() default "";
}

@Service

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    String value() default "";
}

@Repository

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
    String value() default "";
}

@Controller

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    String value() default "";
}

? 所以從注解繼承角度,它們確實完全等價,都被認為是Spring的組件,都會被@ComponentScan掃描注冊為Bean。

? 但它們的"行為"真的完全一樣嗎?并不完全一樣!

下面列舉Spring對不同注解做的"特別處理":

?? 1. @Repository有異常翻譯機制

當你用@Repository標注DAO類時,Spring會做一件額外的事:

捕捉原始數據庫異常,并將其轉為Spring自己的異常類型(比如 DataAccessException)。

這叫做:

Repository exception translation(數據訪問異常翻譯)

源碼位置:

org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor

這在使用MyBatis/JPA時特別有用,不然很多數據庫異常你得自己try-catch。

?? 2. @Controller會被Spring MVC專門處理

  • 標識這個類是Web請求處理器。
  • @RequestMapping、@GetMapping等注解的識別,是通過識別@Controller或@RestController的類來實現的。

它和普通 Bean不一樣,它還被交給了 Spring MVC DispatcherServlet 專門處理請求分發(fā)。

?? 3. @Service沒有特別的行為,但它是AOP建議的目標

雖然@Service本身沒有額外功能,但它通常被用于AOP的增強目標(比如事務處理、日志、監(jiān)控等)。

所以如果你用@Service標注類,寫個切面@Around("execution(* com.xxx.service..*(..))")更好匹配。

? 結論總結一下:

注解

是Bean嗎?

有額外行為?

使用目的

@Component

?

?

通用組件注冊

@Service

?

??(無額外行為)

語義上表示"業(yè)務服務層"

@Repository

?

? 異常轉換機制

DAO層組件、數據庫操作類

@Controller

?

? Spring MVC 控制器

控制請求、返回視圖或JSON響應

所以你說得沒錯:如果只是從Bean注冊的角度看,它們沒有本質區(qū)別。

但在Spring的運行時邏輯里,確實有一層"語義驅動的特殊處理",而這就是Spring精妙的地方:不僅統(tǒng)一處理Bean,還按職責分工做細節(jié)增強。

全部評論

相關推薦

查看17道真題和解析
點贊 評論 收藏
分享
#??虯I配圖神器# ??面試公司:團子??面試崗位:食雜零售研發(fā)部??面試體驗:前兩個志愿炸了,被三志愿收留,是個說話有點小聲的大哥,很注重細節(jié),不問八股,應該要回人才庫了??面試問題:開場給了個假hard題124. 二叉樹中的最大路徑和,不想思考寫了超多 max,調了下過了(美團居然是核心代碼模式,和力扣體驗一模一樣)然后開始拷打項目和科研,有幾個我沒注意到的地方都問的很細,沒答上來,沒有太多可以參考的地方。面試官很重視問題的原因,我之前的方案出現了bug,但是我沒找到原因,換了個方案,面試官覺得你這個態(tài)度不太行,還是得先把原因定位好,不能僥幸。其他八股問了下設計模式的責任鏈,問處理順序可以改變嗎(我當時覺得是運行過程中是處理順序是寫死的,其實是可以的,如果在處理者類中有對引用成員變量的設定方法,可以動態(tài)地插入和移除處理者, 或者改變其順序。)答錯了這么多應該是寄了為啥什么八股都不問呀更新:第二天中午短信過了,4.2二面4.8第二次更新,之前拒掉二面了(理由說了接了其他offer),沒想到昨天又來了兩個一面邀請,一個核心本地,一個還是這個食雜零售部門,上午拒了一個下午又拒一個,不會秋招拉黑了吧??不知道怎么關閉暑期流程#軟件開發(fā)筆面經# #美團求職進展匯總#
點贊 評論 收藏
分享
評論
點贊
收藏
分享

創(chuàng)作者周榜

更多
??途W
牛客企業(yè)服務