国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象

這篇具有很好參考價(jià)值的文章主要介紹了【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解

?哈嘍,哈嘍,大家好~ 我是你們的老朋友:保護(hù)小周???【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解


談起Java 圈子里的框架,最年長(zhǎng)最耀眼的莫過(guò)于 Spring 框架啦,本期給大家?guī)?lái)的是:?將對(duì)象存儲(chǔ)到 Spring 中、Bean 對(duì)象的命名規(guī)則、從Spring 中獲取bean 對(duì)象、注入的關(guān)鍵字、@Autowired 與?@Resource 的區(qū)別、解決@Bean 方法注解注入多個(gè)同類(lèi)型 Bean 對(duì)象的報(bào)錯(cuò)。本文將為大家講解,一起來(lái)看看叭~


本期收錄于博主的專(zhuān)欄:JavaEE_保護(hù)小周?的博客-CSDN博客

適用于編程初學(xué)者,感興趣的朋友們可以訂閱,查看其它 “JavaEE基礎(chǔ)知識(shí)”。

更多精彩敬請(qǐng)期待:保護(hù)小周? *★,°*:.☆( ̄▽?zhuān)?/$:*.°★* ‘


?一、上期回顧

我們已經(jīng)實(shí)現(xiàn)了最基本的 Spring 的讀取和存儲(chǔ) Bean 對(duì)象的操作了,使用 Spring 配置文件(.xml)對(duì)Bean 對(duì)象進(jìn)行存儲(chǔ),使用 ApplicationContext 或 BeanFactory 接口獲取Spring 上下文對(duì)象,上下文對(duì)象就管理著 Spring 中的 Bean 對(duì)象,然后調(diào)用 getBean() 方法獲取指定的Bean 對(duì)象? ,該方法是一個(gè)重載方法,獲取Bean 對(duì)象主要有三種方式:

1.?根據(jù) bean 對(duì)象的 id (標(biāo)志)來(lái)獲取?

2.?根據(jù)對(duì)象類(lèi)型來(lái)獲取 Bean?

3 .根據(jù)?bean 對(duì)象的 id (標(biāo)志)+ 類(lèi)型 獲取 bean

前兩種重載獲取指定Bean對(duì)象的方式各有缺陷,我們推薦使用第三種。


經(jīng)過(guò)前面的學(xué)習(xí),我們雖然實(shí)現(xiàn)了 Spring的基本獲取和存儲(chǔ),但是在操作的過(guò)程中比較繁瑣。

存儲(chǔ) Bean 對(duì)象需要我們手動(dòng)的往 Spring 配置文件中添加配置。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

取出 Bean 對(duì)象,首先需要我們獲取上下文對(duì)象,其次需要調(diào)用 getBean() 方法根據(jù)參數(shù)來(lái)獲取,搞來(lái)搞去感覺(jué)還不如我們傳統(tǒng)的做法,只是多了一個(gè)(依賴(lài)反轉(zhuǎn))的思想。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

所以接下來(lái)我們需要學(xué)習(xí)更簡(jiǎn)單的操作 Bean 對(duì)象的方法——使用注解。

使用Spring 中的相關(guān)注解,來(lái)存儲(chǔ)和讀取 Bean 對(duì)象。

詳細(xì)內(nèi)容:【Spring 】項(xiàng)目創(chuàng)建和使用_保護(hù)小周?的博客-CSDN博客


二、Spring 存儲(chǔ) Bean 對(duì)象

之前我們存儲(chǔ) bean 對(duì)象需要在Spring 配置文件(.xml)添加一行 bean 標(biāo)簽才行,如上圖所示。

現(xiàn)在我們需要學(xué)習(xí)的是如何通過(guò)注解來(lái)代替之前添加 Bean 對(duì)象要手動(dòng)寫(xiě)一行 bean 配置的尷尬

注解(Annotation)是一種Java語(yǔ)言中的元數(shù)據(jù)(metadata),提供了一種代碼級(jí)別的標(biāo)記機(jī)制,用來(lái)表示程序中的一些結(jié)構(gòu)化信息以及對(duì)這些結(jié)構(gòu)進(jìn)行解釋說(shuō)明。注解可以用于類(lèi)、字段、方法、參數(shù)等各種Java程序元素上,并可以通過(guò)反射機(jī)制來(lái)獲取注解信息。

簡(jiǎn)單理解 :

注解就像是一些標(biāo)簽,我們可以將它們添加在程序的代碼中,用來(lái)給代碼添加一些額外的信息和說(shuō)明。這些信息可以幫助程序自動(dòng)化地完成某些操作,比如代碼生成、配置管理、文檔生成等等。

舉個(gè)例子,比如我們想要在類(lèi)中添加一些配置信息,通常我們需要在代碼中手寫(xiě)一些配置代碼,然后在程序中進(jìn)行解析和加載。但是,如果我們使用了注解,我們就可以通過(guò)在類(lèi)上添加一些特定的注解,來(lái)讓程序自動(dòng)化地完成配置的加載和解析工作。這樣可以節(jié)省很多時(shí)間和代碼量。

總之,注解就是一種用來(lái)給程序添加額外信息的工具,可以幫助我們更加方便地管理和自動(dòng)化完成程序的各種操作。


?2.1 配置掃描路徑

之前我們是在 Spring 配置文件(.xml)中手動(dòng)添加 Bean 對(duì)象,如果使用注解的方法存儲(chǔ)我們就只需要配置一下 bean 對(duì)象(還未實(shí)例)所在的包路徑,當(dāng) Spring 啟動(dòng)時(shí),上下文對(duì)象會(huì)根據(jù)Spring 配置文件配置的路徑進(jìn)行掃描,只有路徑(包)添加了注解的 類(lèi)、方法才能被正確的識(shí)別并實(shí)例到 Spring 中。

Spring 配置文件(.xml)的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="animal"></content:component-scan>
</beans>

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

如果說(shuō)添加注解的類(lèi)或方法不在配置掃描的包底下,也是無(wú)法被存儲(chǔ)到 Spring 中的。


2.2 添加注解存儲(chǔ) Bean 對(duì)象

想要將 Bean 對(duì)象更簡(jiǎn)單的存儲(chǔ)到 Spring 中,使用注解有兩種注解類(lèi)型:

1. 類(lèi)注解:顧名思義就是用來(lái)修飾類(lèi)的注解,表示需要將被修飾的類(lèi)實(shí)例并存儲(chǔ)到 Spring 容器中。五大類(lèi)注解:下文詳細(xì)介紹這些注解的含義

@Controller【控制器】、@Service【服務(wù)】、@Repository【倉(cāng)庫(kù)】、@Component【組件】、

@Configuratio【配置】。

2. 方法注解:一個(gè)類(lèi)的中的方法可以實(shí)例另一個(gè)類(lèi)嘛,此時(shí)將該方法的返回值設(shè)置為實(shí)例后的類(lèi)對(duì)象再使用 @Bean 方法注解同樣可以將該對(duì)象(bean對(duì)象)存儲(chǔ)到 Spring 容器中。

在Spring 中五大類(lèi)注解都可以將 Bean 對(duì)象存儲(chǔ)到 Spring 中,沒(méi)有太多的說(shuō)法,但是在后面的框架的學(xué)習(xí)當(dāng)中,每個(gè)注解分層修飾類(lèi),他們的含義就大有講究,此時(shí),我們主要學(xué)習(xí)如何使用注解存取 Bean 對(duì)象,其他知識(shí)點(diǎn)后期再給大家展開(kāi)。


2.2.1 @Controller (控制器)?將Bean 對(duì)象存儲(chǔ)到 Spring 中

先定義一個(gè)學(xué)生類(lèi):

public class Student {
    // 屬性
    private String id;
    private String name;
    private String sex;
    private int age;

    // 行為
    public void homework() {
        System.out.println(name + "在做作業(yè)~");
    }

    @Override
    public String toString() {
        return "student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

給 Student 類(lèi)添加 @Controller 注解將 Student 對(duì)象(運(yùn)行時(shí)自動(dòng))存儲(chǔ)到 Spring 中

1. Spring 配置文件設(shè)置一下掃描路徑

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

2. 給 Student 類(lèi)添加注解

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

非常的酷,就一個(gè)注解 + 設(shè)置一下掃描路徑搞定啦~ Spring 啟動(dòng)的時(shí)候就會(huì)自動(dòng)的將 Student 類(lèi)實(shí)例并添加到 Spring 中。

此時(shí)我們可以使用之前獲取對(duì)象的方法來(lái)嘗試獲取從 Spring 中獲取 Student 類(lèi)的對(duì)象。

ApplicationContext 接口獲取上下文對(duì)象,再調(diào)用 getBean() 方法來(lái)獲取指定的 Bean 對(duì)象。

public class App {
    public static void main(String[] args) {
        //1. 得到 Spring 的上下文對(duì)象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-test.xml");
        //2. 調(diào)用 getBean() 方法獲取指定的 Bean 對(duì)象
        Student student = context.getBean("student",Student.class);

        //3. 使用 Bean 對(duì)象
        student.setId("1");
        student.setName("張三");
        student.setSex("男");
        student.setAge(20);

        student.homework();
        System.out.println(student.toString());
    }
}

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?


2.2.1 @Service?(服務(wù))?將Bean 對(duì)象存儲(chǔ)到 Spring 中

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

其余的三個(gè)注解 @Repository【倉(cāng)庫(kù)】、@Component【組件】、@Configuratio【配置】。? ? ? 在 Spring 中并沒(méi)有太大的含義,都是存儲(chǔ) Bean 對(duì)象,這里也不給大家演示了結(jié)果都一樣。感興趣的老鐵可以自己演示一下。


2.3 為什么需要這么多的類(lèi)注解?

由上述事例所示,五大類(lèi)注解的功能都可以將 Bean 對(duì)象存儲(chǔ)到 Spring 當(dāng)中,功能都一樣的情況下,為啥還需要這么多的類(lèi)注解呢???

每個(gè)注解的具體應(yīng)用場(chǎng)景及其含義:

1. @Controller注解:【控制器】驗(yàn)證前端傳輸?shù)膮?shù)【安全檢驗(yàn)】

Controller層是MVC(Model-View-Controller)設(shè)計(jì)模式中的一部分,負(fù)責(zé)處理用戶(hù)請(qǐng)求和控制應(yīng)用程序的流程。它是應(yīng)用程序中的一個(gè)組件,用于接收來(lái)自用戶(hù)界面(View)的請(qǐng)求,協(xié)調(diào)其他組件(如Service層和Repository層)的工作,并返回相應(yīng)的結(jié)果給用戶(hù)界面。

2. @Service 注解:【服務(wù)層】

主要用于處理業(yè)務(wù)邏輯和執(zhí)行具體的業(yè)務(wù)操作。它位于應(yīng)用程序的中間層,位于控制層和數(shù)據(jù)訪問(wèn)層之間,用于實(shí)現(xiàn)業(yè)務(wù)邏輯的封裝和處理。

3. @Repository注解:【倉(cāng)庫(kù)(數(shù)據(jù)倉(cāng)庫(kù))】可以理解為直接操作數(shù)據(jù)庫(kù)

Repository層是軟件開(kāi)發(fā)中的一種設(shè)計(jì)模式,用于處理數(shù)據(jù)的存取和持久化。在Java應(yīng)用程序中,Repository層通常是數(shù)據(jù)訪問(wèn)層的一部分,與數(shù)據(jù)庫(kù)或其他數(shù)據(jù)存儲(chǔ)介質(zhì)進(jìn)行交互。

4. @Component 注解:【組件】通用化的工具類(lèi)

Component層是Java應(yīng)用程序中的一個(gè)組件化層,主要用于組件的管理和組裝。它負(fù)責(zé)將各個(gè)功能模塊或組件進(jìn)行組合,提供應(yīng)用程序的整體功能。Component層通常位于應(yīng)用程序的頂層,作為應(yīng)用程序的入口點(diǎn)。

5. @Configuration注解:【配置】此處有項(xiàng)目的所有配置

@Configuration注解被Spring Framework用于傳統(tǒng)的XML配置之外,為了更好的支持Java配置,它表示一個(gè)配置類(lèi),被加上此注解后可以當(dāng)做Bean定義來(lái)使用。通過(guò)@Configuration注解,可以很方便地配置Spring容器中的Bean組件。

舉個(gè)例子:

我們每一個(gè)人國(guó)人都有一個(gè)唯一的18 位的身份證號(hào),身份證號(hào)包含了:地區(qū)號(hào)碼,生日、順序碼和校驗(yàn)碼。同一個(gè)省份?/ 市 的群眾身份證號(hào)的前幾位都是一樣的,例如:湖北省新生代的身份證號(hào)碼都是 “42XXXX” 開(kāi)頭的。其中,XXXX 是具體的地區(qū)碼,用來(lái)表示湖北省內(nèi)不同的行政區(qū)劃。是我們可以用一個(gè)String 類(lèi)型?region 變量來(lái)描述地區(qū)碼,從而直觀的看出這個(gè)群眾是來(lái)自那個(gè)地區(qū),用 birthday 變量可以用來(lái)描述一個(gè)出生日期……把一個(gè)完整的身份證號(hào)拆分開(kāi)來(lái),就可以更加直觀的表示這個(gè)人的基本信息,一看 region 變量描述的是地區(qū),42 開(kāi)頭這個(gè)老鐵是湖北的,,其中類(lèi)注解就是這樣的道理,不同 “層次” 的類(lèi)我用不同的注解描述,是不是就很直觀,例如:@Repository注解 按照標(biāo)準(zhǔn),用來(lái)修飾操作數(shù)據(jù)庫(kù)的類(lèi),就很方便維護(hù)。

綜上所述,雖然這五大類(lèi)注解的功能都可以將 Bean 對(duì)象存儲(chǔ)到 Spring 當(dāng)中,但它們的使用場(chǎng)景和語(yǔ)義略有差異,這樣可以更好地滿(mǎn)足不同的需求和場(chǎng)景。也正因如此,Spring框架中涉及的注解種類(lèi)才這么多,以應(yīng)對(duì)不同的業(yè)務(wù)場(chǎng)景和復(fù)雜的需求。

程序的工程分層,調(diào)用流程圖:

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?


2.3.1 類(lèi)注解之間的關(guān)系

查看 @Controller / @Service / @Repository / @Configuration 這些注解的源碼發(fā)現(xiàn):

ctrl + 鼠標(biāo)單擊注解即可查看。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

這些注解的內(nèi)部都有一個(gè) @Component注解, 說(shuō)明這些注解可以認(rèn)為是 @Component 的子類(lèi).


2.4 Bean 對(duì)象的命名規(guī)則

上面我們通過(guò)使用注解的方式存儲(chǔ) Bean 對(duì)象,就是在 Spring 配置文章中設(shè)置Bean 對(duì)象所在的路徑(包),當(dāng)Spring 容器啟動(dòng)時(shí),會(huì)根據(jù)配置文件中的路徑掃描,將有注解的類(lèi)實(shí)例化到容器中。我們?nèi)绻褂弥暗睦戏椒ǐ@取 Bean 對(duì)象,需要先獲取 Spring 上下文對(duì)象(管理Bean),有兩種方式【ApplicationContext 接口】(Spring 3.x 版本后官方推薦),【BeanFactory 接口】

得到上下文對(duì)象后,我們需要調(diào)用 getBean() 方法獲取具體的 Bean 對(duì)象,因?yàn)?getBean() 方法有種重載,所以主要有三種獲取方法:
1. 根據(jù) Bean 對(duì)象ID ,我們手動(dòng)取得名字(缺點(diǎn),:返回值是 Object 所以需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換?)

2. 跟根據(jù) Bean 對(duì)象得類(lèi)型 (缺點(diǎn):有多個(gè)同類(lèi)型得 Bean 存儲(chǔ)在容器中此時(shí)會(huì)拋出異常)

3. 根據(jù) Bean 對(duì)象的?ID 和 Bean 對(duì)象的類(lèi)型 (推薦)

此時(shí)我們通過(guò)類(lèi)注解的方式添加 Bean對(duì)象,那獲取 Bean對(duì)象的方法又該做出什么樣的調(diào)整呢?

通常情況下 Bean (類(lèi))使用的就是標(biāo)準(zhǔn)的大駝峰命名,而讀取的時(shí)候首字母小寫(xiě)就可以獲取 Bean對(duì)象:

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?


當(dāng)類(lèi)名首字母和第二個(gè)字母都是大寫(xiě)時(shí),此時(shí)利用默認(rèn)的首字母小寫(xiě)就不能正常地讀取到 Bean :

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?


關(guān)于這個(gè)獲取 Bean 對(duì)象的默認(rèn)ID ,我們就要了解Spring 關(guān)于 Bean 對(duì)象存儲(chǔ)時(shí)生成的命名規(guī)則

雙擊 shift 鍵,打開(kāi)全局搜索: 輸入 AnnotationbeanName

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

?規(guī)則使用的是 JDK introspector 中的 decapitallze 方法,源碼如下:

public static String decapitalize(String name) {
        if (name == null || name.length() == 0) {
            return name;
        }
        // 1. 如果第一個(gè)字母和第二個(gè)字母都為大寫(xiě)的情況,不做任何處理直接返回,也是就是id 是類(lèi)名
        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                        Character.isUpperCase(name.charAt(0))){
            return name;
        }
        // 2. 否則就將首字母小寫(xiě)
        char chars[] = name.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
}

總結(jié):

當(dāng)使用五大類(lèi)注解注冊(cè) bean對(duì)象時(shí),默認(rèn)情況下獲?。╣etBean() 方法) bean 對(duì)象,只需要將類(lèi)名的首字母小寫(xiě),作為 getBean() 方法的參數(shù)即可;當(dāng) 類(lèi)的首字母和第二個(gè)首字母都是大寫(xiě)的時(shí)候,此時(shí)我們需要將原類(lèi)名作為 getBean() 方法的參數(shù)才能獲取到 bean 對(duì)象。

我們也可以在類(lèi)注解上針對(duì) bean 對(duì)象手動(dòng)進(jìn)行命名操作:

【類(lèi)注解】(value = "name")

下面是一種簡(jiǎn)潔的寫(xiě)法:

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

拓展:如果項(xiàng)目中沒(méi)有目錄,所有的類(lèi)都在 java 的根目錄下怎么存,取 bean 對(duì)象???

<content:component-scan base-package="**"></content:component-scan>

我們可以在 Spring 配置文件中將文件路徑替換成通配符 “**” ,使用通配符的意思就是 Spring 啟動(dòng)后會(huì)從根目錄開(kāi)始掃描查找那些被類(lèi)注解修飾的類(lèi),然后將這些類(lèi)實(shí)例到容器中,然而這樣的結(jié)果就會(huì)導(dǎo)致執(zhí)行的速度變慢慢,效率非常低,所以我們建議是給項(xiàng)目添加合適的路徑。?


2.5 方法注解 @Bean

類(lèi)注解是添加到某個(gè)類(lèi)上面的,顧名思義,方法注解就是用來(lái)修飾方法的,使用方法注解(@Bean)的前提條件是需要配合類(lèi)注解才能將對(duì)象正常的存儲(chǔ)到 Spring 容器中,且該方法的返回值需要與預(yù)期存儲(chǔ) Bean 對(duì)象的類(lèi)型一樣

@Component
public class StudentDemo {
    @Bean
    public Student getStu() {
        //1. 創(chuàng)建對(duì)象
        Student student = new Student();
        //2. 初始化對(duì)象
        student.setId("1");
        student.setName("李小四");
        student.setSex("男");
        student.setAge(18);
        //3. 返回對(duì)象
        return student;
    }
}

以上代碼的功能是 Spring 啟動(dòng)后掃描到了 @Component 注解修飾的 StudengDemo 類(lèi),自然而然需要將其實(shí)例化到 Spring 容器中,在實(shí)例化的過(guò)程中,發(fā)現(xiàn)一個(gè) @Bean 注解,意思就是,如果你想實(shí)例 StudengDemo 類(lèi),那你得先將?@Bean 修飾得 getStu() 方法返回的 Student 對(duì)象(Bean 對(duì)象)注冊(cè)的到 Spring 中。執(zhí)行結(jié)果如下:

此時(shí)我們可以稍作修改,給 StudentDemo 類(lèi) 和 Student 類(lèi)各自提供一個(gè)構(gòu)造方法,由此可以判斷誰(shuí)那個(gè)類(lèi)先加載? 注意:我們要先將 Student 類(lèi)上面的類(lèi)注解去掉,不然就會(huì)存儲(chǔ)兩個(gè) bean 對(duì)象到 Spring 中,關(guān)于存儲(chǔ)多個(gè)同類(lèi)型的 bean 對(duì)象下文講述……

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

注意:通過(guò)方法注解的方式存儲(chǔ) Bean 對(duì)象默認(rèn)情況下是沒(méi)有默認(rèn) ID 的,所以我們通過(guò)類(lèi)型獲取,可以手動(dòng)的給 Bean 對(duì)象設(shè)置 ID (name)。

結(jié)論:方法注解 @Bean 也可以將對(duì)象注冊(cè)到 Spring 中,前提是需要配合類(lèi)注解的使用。

上述代碼中,@Bean 方法注解注冊(cè)的 Student bean 對(duì)象需要依賴(lài)于 StudentDemo 類(lèi)的實(shí)例,當(dāng)我們啟動(dòng) Spring , 首先會(huì)加載StudentDemo 類(lèi),執(zhí)行構(gòu)造方法, 在加載的過(guò)程中發(fā)現(xiàn)一個(gè)需要執(zhí)行 getStu() 方法(設(shè)置屬性),所以呢優(yōu)先去實(shí)例 Student ,再實(shí)例 StudentDemo ,這一塊涉及到 JVM 加載類(lèi)的五個(gè)階段—— Bean 對(duì)象的生命周期,下篇博客再給大家講述~~

A 類(lèi)依賴(lài)于 B類(lèi),所以首先將 B類(lèi)實(shí)例到 Spring 中,現(xiàn)在還沒(méi)涉及到注解動(dòng)態(tài)的將 Bean對(duì)象取出,所以這個(gè)例子不大恰當(dāng)。后面再講述~~~


2.5.1 bean 對(duì)象重命名

@Bean 注解可以通過(guò)設(shè)置name 屬性給 bean 對(duì)象進(jìn)行命名操作:

 @Bean(name = "***")

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

name 其實(shí)是一個(gè)數(shù)組, 所以一個(gè) bean 對(duì)象可以有多個(gè)名稱(chēng)存在:

@Bean(name = {"student", "李小四"})

?name = {} 也是可以省略的:

 @Bean({"student", "李小四"})

注意:當(dāng)我們給 Bean 取了名字之后,默認(rèn)的使用的名稱(chēng)就無(wú)法使用了?。?!

以上便是 使用注解的方式將 bean 對(duì)象存儲(chǔ)到 Spring 中的全部?jī)?nèi)容,如有不妥之處歡迎批評(píng)指正


三、Spring 獲取 bean 對(duì)象

獲取 bean 對(duì)象也叫 “對(duì)象裝配”,“對(duì)象注入”, 意思就是把對(duì)象取出來(lái)放到某個(gè)類(lèi)中。

對(duì)象裝配(對(duì)象注入)的實(shí)現(xiàn)有以下三種方法:

1. 屬性注入? 2. 構(gòu)造方法注入 3. Setter 注入

接下來(lái)博主將圍繞著3種方式展開(kāi)來(lái)給大家講述Spring 如何實(shí)現(xiàn)動(dòng)態(tài)注入 bean 對(duì)象(運(yùn)行時(shí)動(dòng)態(tài)的將 bean 對(duì)象注入到某個(gè)類(lèi)中)。

3.1 屬性注入

屬性注入需要使用到?@Autowired 注解實(shí)現(xiàn)。接下來(lái)給大家舉一個(gè)例子:

有一個(gè)學(xué)生類(lèi)(學(xué)生信息的組織),假設(shè)對(duì)應(yīng)數(shù)據(jù)庫(kù)中的學(xué)生表,有一個(gè)Service 層的 StuService類(lèi),這類(lèi)可以從數(shù)據(jù)庫(kù)中讀取學(xué)生數(shù)據(jù)(增刪查改),實(shí)例成一個(gè)完整的學(xué)生對(duì)象,有一個(gè) StuController 類(lèi),他可以針對(duì)學(xué)生數(shù)據(jù)進(jìn)行實(shí)際的使用(調(diào)用處理),所以 StuController 類(lèi)在運(yùn)行中需要獲取到 StuService 類(lèi)的實(shí)例對(duì)象來(lái)操作數(shù)據(jù)庫(kù)中的學(xué)生表。當(dāng)然這里不會(huì)給大家真的用數(shù)據(jù)庫(kù),寫(xiě)偽代碼來(lái)模擬一下真實(shí)的環(huán)境。

@Service
public class StuService {
    /**
     * 根據(jù)學(xué)生id從數(shù)據(jù)庫(kù)中獲取學(xué)生信息
     * @param id
     * @return
     */
    public Student getStu(String id) {
        //偽代碼,鏈接數(shù)據(jù)庫(kù),查找學(xué)生信息
        Student stu = new Student();
        stu.setId(id);
        stu.setName("張三");
        stu.setAge(18);
        stu.setSex("男");
        return stu;
    }
}
@Controller
public class StuController {
    //1. 屬性注入,從Spring 中取出 StuService 類(lèi)型的bean 對(duì)象并注入到類(lèi)引用中
    @Autowired
    private StuService stuService;

    //2. 調(diào)用注入的 bean 對(duì)象執(zhí)行查詢(xún)操作
    public Student getStu(String id) {
        return stuService.getStu(id);
    }
}

獲取 Controller 中的 getStu 的方法:正常情況下我們就將 Student 學(xué)生的信息轉(zhuǎn)換為 json 格式由前端發(fā)請(qǐng)求,服務(wù)器做出響應(yīng),將數(shù)據(jù)(http協(xié)議)給到前端,前端利用數(shù)據(jù)構(gòu)建頁(yè)面。

package school.student2;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import school.student.Student;

public class App {
    public static void main(String[] args) {
        //1. 得到 Spring 的上下文對(duì)象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-test.xml");
        //2. 調(diào)用 getBean() 方法獲取指定的 Bean 對(duì)象
        StuController stuController = context.getBean("stuController", StuController.class);
        //3. 使用bean 對(duì)象
        Student student = stuController.getStu("1");
        System.out.println(student.toString());
    }
}

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

?屬性注入的核心:

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?


3.2 構(gòu)造方法注入

構(gòu)造方法注入是在類(lèi)的構(gòu)造方法中實(shí)現(xiàn)注入:同樣使用 @Autowired 注解

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

?如果只有一個(gè)構(gòu)造方法,那么 @Autowired 注解可以省略不寫(xiě):

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

如果類(lèi)中出現(xiàn)多個(gè)構(gòu)造方法,那么需要添加上 @Autowired 來(lái)明確指定到底使用哪個(gè)構(gòu)造方法,否則程序會(huì)報(bào)錯(cuò)。


3.3 Setter 注入

Setter 本質(zhì)上就是使用自定義方法來(lái)代替構(gòu)造方法注入,也是需要在 set 方法上添加 @Autowired 注解:

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

注意:使用 Setter 注入一定要添加@Autowired 注解


3.4 三種注入優(yōu)缺點(diǎn)分析

3.4.1 屬性注入

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

優(yōu)點(diǎn):實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,只需要一個(gè)@Autowired 注解

缺點(diǎn):

1. 不能注入不可變的(final)的對(duì)象

final 修飾的引用,只能在創(chuàng)建的時(shí)候進(jìn)行初始化賦值操作,或在構(gòu)造方法中初始化。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

?2. 只能適用于 loC 容器

屬性注入通常與IoC(控制反轉(zhuǎn))容器緊密相關(guān),并且在大多數(shù)情況下,它更常用于IoC容器中。IoC容器通過(guò)管理對(duì)象的生命周期、依賴(lài)關(guān)系和對(duì)象創(chuàng)建等任務(wù),將控制權(quán)交給框架,以實(shí)現(xiàn)解耦和可擴(kuò)展性??傮w而言,屬性注入與IoC容器密切相關(guān),并且在通過(guò)IoC容器管理對(duì)象時(shí),屬性注入是一種常用的依賴(lài)注入方式,能夠幫助實(shí)現(xiàn)代碼的解耦和可配置性。然而,在非IoC場(chǎng)景下,屬性注入的使用可能會(huì)受到一些限制,并且可能不如其他依賴(lài)注入方式適用。

3. 更容易違背單一設(shè)計(jì)原則(針對(duì)類(lèi))

屬性注入在某些情況下可能會(huì)違背單一設(shè)計(jì)原則(Single Responsibility Principle,SRP)。SRP的目標(biāo)是確保一個(gè)類(lèi)對(duì)于變化的原因只有一個(gè),以便提高代碼的可維護(hù)性和靈活性。它強(qiáng)調(diào)職責(zé)的劃分和分離,使每個(gè)類(lèi)專(zhuān)注于單一的功能或關(guān)注點(diǎn)。

以下是屬性注入可能導(dǎo)致違背SRP的一些情況:

  1. 依賴(lài)過(guò)多:屬性注入可能導(dǎo)致一個(gè)類(lèi)具有過(guò)多的依賴(lài)關(guān)系。如果一個(gè)類(lèi)依賴(lài)過(guò)多的其他類(lèi)或組件,那么它可能承擔(dān)過(guò)多的職責(zé)。這樣的類(lèi)可能會(huì)變得龐大而難以理解和維護(hù)。

  2. 責(zé)任擴(kuò)散:屬性注入可能導(dǎo)致一個(gè)類(lèi)承擔(dān)不應(yīng)該由它承擔(dān)的額外職責(zé)。當(dāng)一個(gè)類(lèi)注入了許多屬性時(shí),特別是來(lái)自不同領(lǐng)域的屬性,它可能參與多個(gè)責(zé)任和業(yè)務(wù)邏輯,從而違反SRP。

  3. 耦合度增加:屬性注入可能導(dǎo)致類(lèi)之間的耦合度增加。如果一個(gè)類(lèi)對(duì)其依賴(lài)項(xiàng)的實(shí)例化和配置有太多控制權(quán),它與這些依賴(lài)項(xiàng)之間的耦合度會(huì)增加。這使得類(lèi)的擴(kuò)展和修改變得更加困難。

雖然屬性注入在一些情況下可能會(huì)違背SRP,但這并不意味著屬性注入本身是錯(cuò)誤的或應(yīng)該完全避免的。合理使用屬性注入,可以通過(guò)分割類(lèi)的職責(zé)、解耦依賴(lài)關(guān)系和保持代碼的可維護(hù)性來(lái)避免違背SRP。在設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中,應(yīng)該謹(jǐn)慎選擇注入的屬性和依賴(lài)項(xiàng),確保它們與類(lèi)的職責(zé)和關(guān)注點(diǎn)保持一致,避免過(guò)度復(fù)雜化和耦合。


3.4.2 構(gòu)造方法注入

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

優(yōu)點(diǎn):

1. 可以注入一個(gè)不可變(final修飾)對(duì)象,構(gòu)造方法可以為其賦值。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

?2. 注入的對(duì)象不會(huì)被修改

  • 可以被 final 的修飾(只有一個(gè)實(shí)例)
  • 構(gòu)造方法伴隨著類(lèi)加載只執(zhí)行一次

3. 通用性更好

通過(guò)構(gòu)造方法注入,類(lèi)的依賴(lài)關(guān)系可以明確地表達(dá)出來(lái),構(gòu)造方法注入允許依賴(lài)關(guān)系在類(lèi)的實(shí)例化階段就被傳遞進(jìn)來(lái)。這意味著在類(lèi)的實(shí)例化過(guò)程中,可以清楚地看到類(lèi)所依賴(lài)的對(duì)象是哪些,而不是在方法調(diào)用時(shí)才進(jìn)行依賴(lài)注入。

缺點(diǎn):

沒(méi)有屬性注入實(shí)現(xiàn)簡(jiǎn)單。

需要注意的是,構(gòu)造方法注入并不適用于所有情況,特別是當(dāng)所依賴(lài)的對(duì)象較多時(shí),會(huì)出現(xiàn)構(gòu)造方法參數(shù)列表冗長(zhǎng)的問(wèn)題。在這種情況下,可以考慮使用其他形式的依賴(lài)注入方式,如屬性注入或方法注入,來(lái)提供更靈活的注入方式。選擇合適的依賴(lài)注入方式,取決于具體的情況和項(xiàng)目需求。

構(gòu)造方法注入是 Spring 官方推薦的注入方法。


3.4.3 Setter 方式注入(普通方法注入)

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

Setter 方法是 Spring 早期版本推薦的注入方式,。

優(yōu)點(diǎn):比較符合單一設(shè)計(jì)原則(SRP),方法嘛,針對(duì)的是方法級(jí)別的,雖然在通用性上沒(méi)有構(gòu)造方法強(qiáng),Setter方法注入也有其適用的場(chǎng)景,比如可選的依賴(lài)項(xiàng)或動(dòng)態(tài)變化的依賴(lài)關(guān)系。在這些情況下,setter方法注入可能更為靈活和方便。選擇合適的依賴(lài)注入方式,需要根據(jù)具體需求和設(shè)計(jì)原則進(jìn)行權(quán)衡和判斷。

缺點(diǎn):

1. 不能注入不可變(final)的對(duì)象;

final 修飾的引用,只能在創(chuàng)建的時(shí)候進(jìn)行初始化賦值操作,或在構(gòu)造方法中初始化。

2. 注入對(duì)象可以被修改

set 方法是普通的方法,可以被重復(fù)調(diào)用,在調(diào)用時(shí)就存在被修改的風(fēng)險(xiǎn)。Spring 現(xiàn)版本已經(jīng)推薦使用構(gòu)造方法注入的方式來(lái)進(jìn)行類(lèi)注入。


3.5 @Resource 注入

在 Java 里面在進(jìn)行類(lèi)注入時(shí),除了使用 @Autowired 注解,還可以使用 @Resource 注解:
【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

?@Autowired?和?@Resource?都是在 Java 中用于進(jìn)行依賴(lài)注入的注解,但它們有一些不同之處。


3.5.1 @Autowired 和 @Resource 的區(qū)別

  1. 出生不同:@Autowired 注解出自于Spring框架(非官方),? @Resource 注解出自于 JDK(官方)。
  2. 功能支持不同:@Autowired 可用于屬性注入,構(gòu)造方法注入,和 Setter(普通方法) 注入.而 @Resoure 只能用于 Setter 注入和屬性注入, 不能用于構(gòu)造方法注入(意味著不能注入不可變對(duì)象).
  3. 參數(shù)支持不同:? @Resource 支持更多的參數(shù)設(shè)置, 例如: 對(duì)Bean 取一個(gè)名字(name), 而 @Autowired 只能設(shè)置?required 參數(shù)。required?是?@Autowired?注解的一個(gè)可選屬性,默認(rèn)值為?true。它用于指定依賴(lài)注入是否是必需的。當(dāng)?required?屬性設(shè)置為?true?時(shí),如果找不到匹配的依賴(lài)對(duì)象,則會(huì)拋出?NoSuchBeanDefinitionException?異常。

示例:

@Autowired(required = true)
private MyDependency myDependency;

當(dāng)?required?屬性設(shè)置為?false?時(shí),如果找不到匹配的依賴(lài)對(duì)象,則會(huì)將依賴(lài)對(duì)象設(shè)置為?null,即允許依賴(lài)注入的可選性。

示例:

@Autowired(required = false)
private MyDependency myDependency;

盡管?required?默認(rèn)值為?true,但是在某些情況下,我們可能使用?@Autowired(required = false)?來(lái)標(biāo)記可選的依賴(lài)注入,以便在沒(méi)有匹配的依賴(lài)對(duì)象時(shí)不拋出異常。這在需要可選依賴(lài)或動(dòng)態(tài)注入的場(chǎng)景下非常有用。


3.6 @Bean 注入多個(gè)同類(lèi)型的?bean 對(duì)象報(bào)錯(cuò)處理

當(dāng)我們使用 @Bean 方法注解往 Spring 中注入多個(gè)同類(lèi)型的 Bean 對(duì)象時(shí),就會(huì)報(bào)錯(cuò)。

注意:以往的例子我們需要在 Spring 配置文件中將路徑注釋一下,不然啟動(dòng)的時(shí)候Spring 容器中會(huì)注冊(cè)多個(gè)同類(lèi)型的 bean對(duì)象(stu)。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

@Component
public class StudentDemo {
    StudentDemo() {
        System.out.println("StudentDemo 執(zhí)行");
    }
    @Bean
    public Student getStu() {
        //1. 創(chuàng)建對(duì)象
        Student student = new Student();
        //2. 初始化對(duì)象
        student.setId("1");
        student.setName("李小四");
        student.setSex("男");
        student.setAge(18);
        //3. 返回對(duì)象
        return student;
    }

    @Bean
    public Student getStu2() {
        //1. 創(chuàng)建對(duì)象
        Student student = new Student();
        //2. 初始化對(duì)象
        student.setId("2");
        student.setName("王小五");
        student.setSex("男");
        student.setAge(20);
        //3. 返回對(duì)象
        return student;
    }
}

在另一個(gè)類(lèi)中獲取 Student 對(duì)象:

public class StudentApp {
    public static void main(String[] args) {
        //1. 得到 Spring 的上下文對(duì)象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-test.xml");
        //2. 調(diào)用 getBean() 方法獲取指定的 Bean 對(duì)象
        StudentController stuController = context.getBean(StudentController.class);

        //3. 利用 stuController 對(duì)象的 getStudent()獲取 bean 對(duì)象
        Student student = stuController.getStudent();
        System.out.println(student.toString());
    }
}

@Controller
class StudentController {

    //1. 注入 student 對(duì)象,在StudentDemo 類(lèi)中我們使用 @Bean 注入了兩個(gè)stu 對(duì)象
    @Autowired
    private Student student;

    //2. 返回
    public Student getStudent() {
        return student;
    }
}

以上程序執(zhí)行結(jié)果:

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

同一類(lèi)型多個(gè) Bean 報(bào)錯(cuò)處理:?

  • 使用Resoure(name = "FunctionName") 進(jìn)行類(lèi)注入的時(shí)候只能指定獲取@Bean注解修飾方法的名字,如此一來(lái),問(wèn)題迎刃而解~
  • 使用@Qualifier 注解定義名稱(chēng),可以跟@Autowired 注解配合使用(Autowired 注解不可以指定name 注入)。

1. 使用 @Resource(name = "XXXXX") 定義

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

2. 使用 @Qualifier?

@Qualifier注解?用于幫助指定特定的依賴(lài)注入或自動(dòng)裝配。它通常與依賴(lài)注入框架(如Spring)一起使用,以解決多個(gè)候選對(duì)象的歧義性。在依賴(lài)注入中,當(dāng)存在多個(gè)相同類(lèi)型的bean時(shí),可以使用@Qualifier注解來(lái)標(biāo)識(shí)要使用的具體bean。通過(guò)在@Qualifier注解中指定一個(gè)唯一的標(biāo)識(shí)符(name),可以告訴依賴(lài)注入框架,注入哪個(gè)具體的bean。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?


?四、總結(jié)

1. 將對(duì)象存儲(chǔ)到 Spring 中:

  • 古老一點(diǎn)的做法是在 Spring 配置文件的 <Beans> </Beans> 標(biāo)簽下直接添加注解。

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

不好的一點(diǎn)是比較麻煩,每個(gè) Bean 對(duì)象都需要我們手動(dòng)的添加,對(duì)此我們有了注解的方式。

  • 使用類(lèi)注解:@Controller 、@Service、@Repository、@Configuration、@Component這些其他注解的內(nèi)部都有一個(gè) @Component注解, 說(shuō)明這些注解可以認(rèn)為是 @Component 的子類(lèi).

使用類(lèi)注解:需要在Spring 配置文件中設(shè)置包掃描路徑,當(dāng)Spring 啟動(dòng)時(shí),會(huì)根據(jù)包路徑下的類(lèi)注解將修飾的類(lèi)實(shí)例到 Spring 當(dāng)中,類(lèi)直接需要配合掃描路徑使用,不然無(wú)法成功注入(此處是單例模式,一個(gè)類(lèi)只有一份實(shí)例)。

  • 使用方法注解 @Bean 【注意事項(xiàng):必須配合類(lèi)注解一起使用】

2. Bean 對(duì)象的命名規(guī)則

類(lèi)首字母大寫(xiě)和類(lèi)首字母小寫(xiě)及第二個(gè)字母小寫(xiě),都是默認(rèn)都是通過(guò)首字母小寫(xiě)作為name 來(lái)獲取 Bean ;如果類(lèi)首字母和第二個(gè)字母都是大寫(xiě),那么直接使用原類(lèi)名作為name 來(lái)獲取 Bean 。

3. 從Spring 中獲取bean 對(duì)象:

  • 屬性注入?
  • 構(gòu)造方法注入(官方推薦)
  • Setter 注入

?4. 注入的關(guān)鍵字:

@Autowired 和 @Resource

5. @Autowired 與?@Resource 的區(qū)別:

  • 出生不同:Autowired 出自Spring? ,Resource 出自 JDK
  • 參數(shù)不同:@Resource 支持更多的參數(shù),例如可以在獲取的時(shí)候給 Bean 對(duì)象取名字
  • 功能的不同:@Autowired 支持屬性注入,構(gòu)造方法注入和 Setter 方法注入,@Resource 只支持屬性注入和 Setter 方法注入。
  • @Autowired 先根據(jù)Bean 對(duì)象的類(lèi)型查找, 之后再根據(jù)名稱(chēng)查找, @Resource 先根據(jù)名稱(chēng)查找,再根據(jù)類(lèi)型查找

6. 解決@Bean 方法注解注入多個(gè)同類(lèi)型 Bean 對(duì)象的報(bào)錯(cuò):

  • 使用 @Resource(name= " 方法名")
  • 使用 @Qualifier (value = "方法名")

好了,到這里,【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象?博主已經(jīng)分享完了,希望對(duì)大家有所幫助,如有不妥之處歡迎批評(píng)指正。?

【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?

下期預(yù)告:Bean 的作用域和生命周期

感謝每一位觀看本篇文章的朋友,更多精彩敬請(qǐng)期待:保護(hù)小周? *★,°*:.☆( ̄▽?zhuān)?/$:*.°★*?

遇見(jiàn)你,所有的星星都落在我的頭上……【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象,JavaEE,spring,java,注解?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-533946.html

到了這里,關(guān)于【Spring】使用注解讀取和存儲(chǔ)Bean對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring使用注解存儲(chǔ)和讀取對(duì)象

    Spring使用注解存儲(chǔ)和讀取對(duì)象

    之前我們存儲(chǔ)Bean時(shí),需要在spring-config.xml中添加bean注冊(cè)才行,這樣的方式并不簡(jiǎn)單。我們要想 更簡(jiǎn)單的存儲(chǔ)和讀取對(duì)象的核心是使用注解 1.使用類(lèi)注解(五大類(lèi)注解): @Controller:控制器,驗(yàn)證用戶(hù)請(qǐng)求的數(shù)據(jù)正確性(安保系統(tǒng)) @Service:服務(wù)層,編排和調(diào)度具體執(zhí)行方法的(客服

    2023年04月19日
    瀏覽(26)
  • 【JavaEE】Spring中注解的方式去獲取Bean對(duì)象

    【JavaEE】Spring中注解的方式去獲取Bean對(duì)象

    【JavaEE】Spring的開(kāi)發(fā)要點(diǎn)總結(jié)(3) 在前面的代碼里,我們獲取Bean對(duì)象也比較麻煩: 本文章就是為了更方便地去獲取Bean對(duì)象~ 對(duì)象裝配 也叫 對(duì)象注入 那么有沒(méi)有對(duì)應(yīng)的注解去實(shí)現(xiàn)這個(gè)功能呢? Spring提供的三種實(shí)現(xiàn)方法: 屬性注入 構(gòu)造方法注入 Setter注入 而這種非明文獲取

    2024年02月15日
    瀏覽(25)
  • Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象、使用注解存取對(duì)象

    Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象、使用注解存取對(duì)象

    我們知道物件都會(huì)隨著時(shí)代的發(fā)展,越變?cè)胶?jiǎn)單的。Spring 框架也不意外;我們?cè)谥按鎯?chǔ)Bean對(duì)象是在配置文件中添加 bean/bean 來(lái)存入Bean對(duì)象到Spring當(dāng)中的,使用那個(gè)類(lèi)對(duì)象就要存入那個(gè),一個(gè)兩個(gè)類(lèi)對(duì)象還好,如果需要的對(duì)象多了,就會(huì)非常麻煩?,F(xiàn)在,隨著 Spring 發(fā)展不用

    2024年02月11日
    瀏覽(23)
  • Spring中Bean對(duì)象的存儲(chǔ)與讀取

    Spring中Bean對(duì)象的存儲(chǔ)與讀取

    在項(xiàng)目的 pom.xml 中添加 Spring 支持 如何選定版本環(huán)境:打開(kāi)官網(wǎng),點(diǎn)擊github圖標(biāo) jdk8最后一個(gè)Spring版本是5.3.x,Spring6.0.x最低需要jdk17 版本沖突問(wèn)題Maven自己處理 version : 可以選擇帶有 RELEASE結(jié)尾或者純數(shù)字結(jié)尾,這樣的版本更穩(wěn)定 項(xiàng)目下創(chuàng)建一個(gè)main方法的啟動(dòng)類(lèi) 存儲(chǔ) Bean 之前

    2024年01月24日
    瀏覽(21)
  • Spring更簡(jiǎn)單的存儲(chǔ)和讀取Bean對(duì)象

    Spring更簡(jiǎn)單的存儲(chǔ)和讀取Bean對(duì)象

    目錄 1.第一個(gè)Spring項(xiàng)目 2.存儲(chǔ)Bean對(duì)象 2.1 準(zhǔn)備工作 2.2?五大類(lèi)注解 2.3?方法注解@Bean 2.4 Bean對(duì)象的默認(rèn)命名規(guī)則 3. 讀取Bean對(duì)象 3.1 屬性注入 3.2 setter注入 3.3 構(gòu)造方法注入 3.4 注入異常問(wèn)題 3.5 注入方式優(yōu)缺點(diǎn) 3.6 @Autowired和@Resource的區(qū)別 在學(xué)習(xí)更簡(jiǎn)單的方式來(lái)讀取和存儲(chǔ)Bean對(duì)象

    2024年02月03日
    瀏覽(23)
  • 【JavaEE進(jìn)階】Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象

    【JavaEE進(jìn)階】Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象

    配置掃描路徑是使用注解之前的前置工作,是非常重要的,是必須的操作項(xiàng).只有被配置的包下的所有類(lèi),添加了注解才能被正確的識(shí)別并保存到 Spring 中. 首先創(chuàng)建一個(gè)Spring項(xiàng)目.創(chuàng)建好后,第一步就是配置掃描路徑:在 resources 目錄中創(chuàng)建一個(gè) spring-config.xml 文件.然后在 spring-config.

    2024年02月12日
    瀏覽(22)
  • 從 Spring 的創(chuàng)建到 Bean 對(duì)象的存儲(chǔ)、讀取

    從 Spring 的創(chuàng)建到 Bean 對(duì)象的存儲(chǔ)、讀取

    目錄 創(chuàng)建 Spring 項(xiàng)目: 1.創(chuàng)建一個(gè) Maven 項(xiàng)目: ?2.添加 Spring 框架支持: 3.配置資源文件: 4.添加啟動(dòng)類(lèi): Bean 對(duì)象的使用: 1.存儲(chǔ) Bean 對(duì)象: 1.1 創(chuàng)建 Bean: 1.2 存儲(chǔ) Bean 到容器內(nèi): 2.獲取 Bean 對(duì)象: 2.1 創(chuàng)建 Spring 上下文: 2.2 獲取指定 Bean 對(duì)象: ApplicationContext 和 BeanFactor

    2024年02月06日
    瀏覽(16)
  • JavaEE 突擊 5 - Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象(2)

    JavaEE 突擊 5 - Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象(2)

    大家新年快樂(lè) , 祝大家新的一年如圖 這個(gè)專(zhuān)欄給大家介紹一下 Java 家族的核心產(chǎn)品 - SSM 框架 JavaEE 進(jìn)階專(zhuān)欄 Java 語(yǔ)言能走到現(xiàn)在 , 仍然屹立不衰的原因 , 有一部分就是因?yàn)?SSM 框架的存在 接下來(lái) , 博主會(huì)帶大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相關(guān)知識(shí)點(diǎn) 并且?guī)ьI(lǐng)

    2024年02月19日
    瀏覽(22)
  • 【JavaEE】DI與DL的介紹-Spring項(xiàng)目的創(chuàng)建-Bean對(duì)象的存儲(chǔ)與獲取

    【JavaEE】DI與DL的介紹-Spring項(xiàng)目的創(chuàng)建-Bean對(duì)象的存儲(chǔ)與獲取

    Spring的開(kāi)發(fā)要點(diǎn)總結(jié) Spring的初步了解博客:【JavaEE】JavaEE進(jìn)階:框架的學(xué)習(xí) - Spring的初步認(rèn)識(shí)_s:103的博客-CSDN博客 就不帶大家回顧了~ 從框架獲取的對(duì)象稱(chēng)為獲取【Bean對(duì)象】! Java是咖啡,Bean就是\\\"咖啡豆\\\",也就是“對(duì)象” Spring項(xiàng)目開(kāi)發(fā)就是 開(kāi)業(yè) , 放咖啡豆到罐子里 , 后

    2024年02月16日
    瀏覽(22)
  • 3. Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象(五大類(lèi)注解 & 方法注解)

    3. Spring 更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象(五大類(lèi)注解 & 方法注解)

    目錄 1. 存儲(chǔ) Bean 對(duì)象 1.1 配置掃描路徑 1.2 添加注解存儲(chǔ) Bean 對(duì)象 1.2.1 @Controller(控制器存儲(chǔ)) 1.2.2?@Service(服務(wù)存儲(chǔ)) 1.2.3?@Repository(倉(cāng)庫(kù)存儲(chǔ)) 1.2.4?@Component(組件存儲(chǔ)) 1.2.5?@Configuration(配置存儲(chǔ)) 1.3 使用多個(gè)類(lèi)注解的原因 1.3.1 五大注解之間的關(guān)系 1.3.1 Bean 的命名

    2024年02月15日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包