成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

private final、@Autowired、@Resource你更喜歡哪個?

開發 前端
CommonAnnotationBeanPostProcessor?使用了Java的反射機制來解析注解,并通過 javax.annotation.Resource?規范中定義的算法來查找匹配的依賴。根據規范,@Resource?注解默認按照字段或方法參數的名稱進行依賴的匹配,也可以通過 name屬性指定特定的依賴名稱。

一、引言

現在有一些流言,想必大多都是非Java程序員對Java程序員的稱謂或者嘲諷:“spring boy”。

相信現在大家基本上都是使用的基于spring或者SpringBoot框架構建公司的各種業務應用,這個稱謂對我們來說也沒有啥了。

不過就有一種嘲諷的意思是脫離了Spring我們就不能開發了。

不知道大家是什么感受,不過了不起不以為然,沒了spring就自己定義一套處理流程...

不過目前了不起也還是使用spring生態,今天有個項目中出現了三種注入bean的方式,@Resource、@Autowired、private final,我們一起來看一看吧。

二、Bean的注入

這里是一個簡單的示例代碼,演示了 @Resource、@Autowired和 private final三種注入方式的使用:

publicclassMyService{
@Resource
private MyDependency resourceDependency;

@Autowired
private MyDependency autowiredDependency;

privatefinal MyDependency finalDependency;

publicMyService(MyDependency finalDependency){
this.finalDependency = finalDependency;
    }
  
// ...
}

publicclassMyDependency{
// ...
}

在上面的示例中,MyService類使用了三種不同的方式來注入 MyDependency依賴。

@Resource和 @Autowired注解用于注入可變的依賴,而 private final方式用于注入不可變的依賴。

這三種方式都是目前注入bean的方式,也常被面試官提及發問,不管你使用哪種方式,都是可以的。

三、@Resource

@Resource的原理:@Resource注解是Java標準庫提供的一種依賴注入方式。

在Spring中,@Resource注解的處理由 CommonAnnotationBeanPostProcessor類負責。

該類是一個Bean后置處理器,用于處理使用了 @Resource注解的字段或方法參數。

CommonAnnotationBeanPostProcessor在Spring的容器初始化過程中起作用,它會掃描所有的Bean定義,并檢查是否存在使用了 @Resource注解的字段或方法參數。

當檢測到這樣的注解時,它會解析注解中指定的名稱(name),并嘗試查找匹配的依賴。

具體地說,CommonAnnotationBeanPostProcessor使用了Java的反射機制來解析注解,并通過 javax.annotation.Resource規范中定義的算法來查找匹配的依賴。根據規范,@Resource注解默認按照字段或方法參數的名稱進行依賴的匹配,也可以通過 name屬性指定特定的依賴名稱。

@Resource的使用方式:@Resource注解可以用于字段、方法和構造函數上,用于指定要注入的依賴。下面是幾種常見的使用方式:

  • 字段注入:
publicclassMyService{
@Resource
private MyDependency dependency;
// ...
}
  • 方法注入:
publicclassMyService{
private MyDependency dependency;

@Resource
publicvoidsetDependency(MyDependency dependency){
this.dependency = dependency;
    }
// ...
}
  • 構造函數注入:
publicclassMyService{
private MyDependency dependency;

@Resource
publicMyService(MyDependency dependency){
this.dependency = dependency;
    }
// ...
}

在上述示例中,@Resource注解用于標記要注入的依賴,并根據默認的名稱匹配規則或顯式指定的名稱來查找依賴。

需要注意的是,@Resource注解是Java標準庫中的注解,因此它可以與Java SE和Java EE應用程序一起使用,不僅限于Spring框架。

總結起來,@Resource注解是Java標準庫提供的一種依賴注入方式,在Spring中借助 CommonAnnotationBeanPostProcessor來實現。它可以用于標記要注入的依賴,并根據名稱匹配規則或顯式指定的名稱來查找依賴。

四、@Autowired

當涉及到 @Autowired注解的原理、使用方式以及與 @Resource注解的區別時,我們需要了解它在Spring中的實現方式。下面我將詳細解釋 @Autowired的原理、使用方式以及與 @Resource注解的區別。

@Autowired的原理:

@Autowired注解是Spring Framework提供的一種依賴注入方式。它通過 AutowiredAnnotationBeanPostProcessor類來實現。AutowiredAnnotationBeanPostProcessor是一個Bean后置處理器,用于處理使用了 @Autowired注解的字段、方法或構造函數參數。

在Spring的容器初始化過程中,AutowiredAnnotationBeanPostProcessor會掃描所有的Bean定義,檢查是否存在使用了 @Autowired注解的字段、方法或構造函數參數。當檢測到這樣的注解時,它會解析注解,并根據依賴的類型來尋找匹配的Bean,并將其注入到目標對象中。

具體來說,AutowiredAnnotationBeanPostProcessor使用了Java的反射機制來解析 @Autowired注解,并利用Spring容器中的Bean定義信息來查找匹配的依賴。它支持按照類型、名稱和限定符等方式進行依賴的解析和注入。

@Autowired的使用方式:

@Autowired注解可以用于字段、方法和構造函數上,用于指定要注入的依賴。下面是幾種常見的使用方式:

  • 字段注入:
public class MyService {
    @Autowired
    private MyDependency dependency;
    // ...
}
```
  • 方法注入:
public class MyService {
    private MyDependency dependency;

    @Autowired
    public void setDependency(MyDependency dependency) {
        this.dependency = dependency;
    }
    // ...
}
```
  • 構造函數注入:
public class MyService {
    private MyDependency dependency;

    @Autowired
    public MyService(MyDependency dependency) {
        this.dependency = dependency;
    }
    // ...
}
```

在上述示例中,@Autowired注解用于標記要注入的依賴。Spring會根據依賴的類型(或名稱和限定符)自動查找匹配的Bean,并將其注入到目標對象中。

@Autowired與@Resource的區別:

盡管 @Autowired和 @Resource都是用于依賴注入的注解,但它們在一些方面有一些區別。

  1. 來源和依賴關系:@Autowired是Spring特有的注解,用于實現Spring的依賴注入機制。它通過類型匹配來解析依賴關系。而 @Resource是Java標準庫中的注解,它可以與Java SE和Java EE應用程序一起使用,不僅限于Spring框架。@Resource通過名稱匹配來解析依賴關系。
  2. 配置方式:@Autowired注解通常與 @Component、@Service等Spring注解一起使用,通過組件掃描和自動裝配來實現依賴注入。而 @Resource注解不需要特定的配置,它可以直接用于字段、方法和構造函數上。
  3. 名稱匹配規則:@Autowired注解默認按照類型進行依賴的匹配。如果存在多個匹配的Bean,可以使用 @Qualifier注解指定特定的Bean名稱或限定符。而 @Resource注解默認按照名稱進行依賴的匹配,也可以通過 name屬性指定特定的依賴名稱。
  4. 兼容性:由于 @Resource是Java標準庫中的注解,因此它可以與Java SE和Java EE應用程序一起使用,并且在不同的容器中具有較好的兼容性。相比之下,@Autowired注解是Spring特有的注解,主要用于Spring框架中,因此在非Spring環境中可能無法正常使用。
  5. Null處理:當無法找到匹配的依賴時,@Autowired注解的字段或方法參數可以為 null,而 @Resource注解要求必須找到匹配的依賴,否則會拋出異常。

需要注意的是,盡管 @Autowired和 @Resource有一些區別,但在大多數情況下,它們可以互換使用。

如果您只是簡單地進行依賴注入,并且不需要關注兼容性問題,那么兩者的選擇取決于個人偏好。

五、priavet final

private final字段的自動注入原理:

在Spring Boot中,對于 private final字段的自動注入,Spring使用構造函數注入(Constructor Injection)來實現。當一個Bean有一個或多個 private final字段需要注入時,Spring會嘗試在容器中查找與這些字段類型匹配的Bean,并使用構造函數注入來實例化Bean對象。

構造函數注入的原理是,Spring會查找與構造函數參數類型匹配的Bean,并將它們作為參數傳遞給構造函數,從而實現對 private final字段的賦值。

private final字段的使用方式:

在使用 private final字段進行自動注入時,需要遵循以下幾個步驟:

  1. 定義一個帶有private final字段的類,并確保該類是一個Spring Bean。
@Component
public class MyService {
    private final MyDependency dependency;

    public MyService(MyDependency dependency) {
        this.dependency = dependency;
    }

    // ...
}
```
  1. 在類的構造函數中接收依賴參數,并將其賦值給 private final字段。
  2. Spring Boot會自動掃描并創建Bean實例,同時檢測到帶有 private final字段的構造函數,會自動解析依賴并進行注入。

需要注意的是,由于 private final字段是不可變的,一旦注入后就無法修改。這種不可變性有助于確保字段的安全性和線程安全性。

六、總結

了不起和大家聊的springBean三種注入方式大家都爛熟于心了,具體使用還是看個人喜好,并無優劣之分。

責任編輯:武曉燕 來源: Java面試教程
相關推薦

2010-07-30 13:58:01

命令行GUI

2022-09-27 07:31:57

Property模式數據

2021-07-09 14:26:11

KotlinLogo設計

2012-05-04 14:09:30

JavaScript

2020-02-10 10:05:12

Linux發行版Ubuntu

2016-01-11 11:56:14

jQueryAngularJS

2021-12-02 09:04:05

布局問題文字對齊圖片設計

2024-11-05 09:42:59

開發軟件命令行

2022-08-29 07:05:02

JSRJava語言

2018-01-31 14:20:36

Linux分區管理fdisk

2022-04-18 07:53:26

圣杯布局雙飛翼布局淘寶

2012-05-29 09:30:10

Windows Pho

2022-05-16 15:17:11

區塊鏈安全加密貨幣

2016-03-10 14:48:10

FedoraKorora 23Linux

2023-02-17 08:02:45

@Autowired@Resource

2024-08-19 08:16:57

@Resource@AutowiredSpring

2023-07-04 16:28:23

2024-07-31 09:01:05

VSCode主題Dracula

2011-06-16 14:47:46

激光打印機推薦
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人a | 激情国产| 狠狠操狠狠干 | 日韩免费视频一区二区 | 国产一级片免费视频 | 亚洲女优在线播放 | 超碰97免费在线 | 亚洲精品视频播放 | 久久久蜜桃一区二区人 | 久久精品亚洲欧美日韩精品中文字幕 | 91视频免费黄| 欧美性tv| 久久久女女女女999久久 | 蜜臀网站| 91精品国产综合久久精品 | 香蕉久久久 | 国产美女精品 | 久久久成人一区二区免费影院 | 黑人巨大精品欧美黑白配亚洲 | 一区二区三区四区电影 | aa级毛片毛片免费观看久 | 国产成人精品一区二区三区网站观看 | www.久| 国产成人精品999在线观看 | h视频在线观看免费 | 欧美成年黄网站色视频 | 日韩中文一区 | 国产第一页在线观看 | 国产伦精品一区二区三区精品视频 | 少妇一级淫片aaaaaaaaa | 国产在线97 | 99久久久国产精品 | 三级国产三级在线 | 日韩欧美中文 | 免费午夜电影 | 日韩精品一区二区三区中文在线 | 天天干天天色 | 国产视频精品在线观看 | 五月综合激情网 | 国产日韩一区二区三区 | 精品国产成人 |