最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring?中?Bean?對象的存儲和取出

 更新時間:2022年11月21日 16:57:30   作者:風(fēng)能保暖內(nèi)褲  
由于?Spring?擁有對象的管理權(quán),所以我們也需要擁有較為高效的對象存儲和取出的手段,下面我們來分別總結(jié)一下,對Spring?中?Bean?對象的存儲和取出知識感興趣的朋友跟隨小編一起看看吧

由于 Spring 擁有對象的管理權(quán),所以我們也需要擁有較為高效的對象存儲和取出的手段,下面我們來分別總結(jié)一下:

存對象

配置文件

在存儲對象之前,我們需要先配置一下 Spring 的掃描目錄,這樣 Spring 即可在正確的目錄中識別出我們想要給交給 Spring 進行管理的對象

首先在項目中的 resources 目錄下添加一個 xml 文件,名字可以自定義

隨后在這個 xml 中添加如下代碼,這段代碼可以直接復(fù)制,但是要修改倒數(shù)第二行的 base-package 中的路徑改成自己的路徑

<?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">
    <? 下面這行代碼是設(shè)置 spring 的掃描目錄,base-package 中的路徑 可以直接設(shè)置成我們代碼中的根目錄 ?>
    <content:component-scan base-package="dir"></content:component-scan>
</beans>

類注釋

在 Spring 中我們可以通過類注釋或者方法注釋來進行對象的存儲,其中類注釋是用的比較多的,類注釋總共有 5 種:

  • @Conntroller,業(yè)務(wù)邏輯層
  • @Service,服務(wù)器存儲
  • @Repository,倉庫存儲,可以用來操作數(shù)據(jù)庫
  • @Component,項目組件層
  • @Configuration,配置層

這五種類注釋的作用都是可以直接將這個類對象儲存到 Spring 中,但是卻有 5 種類注釋,這么做的原因是:能夠讓我們看到類注釋就能得知這個類的大致功用

命名規(guī)則

類注釋中有兩套命名規(guī)則

  • 如果當(dāng)前類名中前兩個字母都是大寫,那么存入 Spring 中的對象名字默認(rèn)是類名
  • 否則名字為第一個字母轉(zhuǎn)為小寫后的類名

除了上面 5 種類注釋之外,還有方法注釋

方法注釋

方法注釋就是將注釋@Bean加到方法上方,并且必須搭配類方法使用

作用:將這個方法返回的對象存入到 Spring 中

例如

@Controller
public class Student {
    @Bean
    private Student getStudent() {
        return new Student();
    }
}

通過 @Bean 注釋存入 Spring 中的對象名字默認(rèn)是方法名,我們也可以直接在 @Bean 后面直接加上參數(shù)指定這個對象的名字,例如

@Controller
public class Student {
    @Bean(name="sb")  // 設(shè)置對象的名字
    private Student getStudent() {
        return new Student();
    }
}

取對象

在 Spring 中,獲取 Spring 中的對象也有另一種叫法:對象裝配
主要有三種對象裝配的方式

屬性注入

我們可以直接在成員變量中添加 @Autowired 注釋, @Autowired 會優(yōu)先匹配 Spring 中類名相同的對象,例如下面代碼中的 user,Autowired 會優(yōu)先按照 user 的類型在 spring 中進行匹配

@Controller
public class Student {
    @Autowired
    private User user;

    @Bean(name="sb")
    private Student getStudent() {
        return new Student();
    }
}

這種注入方式很簡單也很快,但是缺點不少:

  • 可移植性差,這個用法是建立在 IoC 容器上的,移植到其他框架上可能無法使用
  • 無法注入不可變的對象,也就是 final 修飾的對象
  • 因為 final 修飾的變量只有兩個初始化時機,第一個是直接賦值,第二個是在類的構(gòu)造方法中賦值,顯然這種對象注入的方式無法滿足其中一個條件
  • 由于使用簡單,容易濫用,所以比較容易被違背單一設(shè)計原則(即一個類只干一件事)

setter 注入

首先創(chuàng)建一個要注入的對象,然后通過「右鍵 — generate — setter」生成一個 setter 方法,最后在這個 setter 方法頭頂上添加 @Autowired 注釋

@Controller
public class Student {

    private User user;

    @Autowired  // 通過 setter 注入
    public void setUser(User user) {
        this.user = user;
    }
}

setter 注入的缺點:

  • 由于是 setter 方法,所以可能多次調(diào)用,這就意味著這個對象可以被多次修改
  • 依舊無法注入 final 修飾的對象,原因同上

構(gòu)造方法注入

顧名思義,這是在構(gòu)造方法上添加 @Autowired 注釋來注入對象,如下

@Controller
public class Student {
    private User user;

    @Autowired
    public Student(User user) {
        this.user = user;
    }
}

構(gòu)造方法注入的優(yōu)點:

  • 由于是構(gòu)造方法,只會執(zhí)行一次,所以對象不會被重復(fù)更改
  • 可以注入 final 修飾的對象(在構(gòu)造方法中賦值)
  • JDK本身就支持構(gòu)造方法,所以有更低的門檻,說人話:具有更強的可移植性

到此這篇關(guān)于詳解Spring 中 Bean 對象的存儲和取出的文章就介紹到這了,更多相關(guān)Spring Bean 對象的存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • bootstrap.yml如何讀取nacos配置中心的配置文件

    bootstrap.yml如何讀取nacos配置中心的配置文件

    這篇文章主要介紹了bootstrap.yml讀取nacos配置中心的配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    Spring Security是一個可以為Java應(yīng)用程序提供全面安全服務(wù)的框架,同時它也可以輕松擴展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證,感興趣的可以了解一下
    2023-11-11
  • IDEA中使用Docker Compose容器編排的實現(xiàn)

    IDEA中使用Docker Compose容器編排的實現(xiàn)

    這篇文章主要介紹了IDEA中使用Docker Compose容器編排的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解 Java HashMap 實現(xiàn)原理

    詳解 Java HashMap 實現(xiàn)原理

    這篇文章主要介紹了詳解 Java HashMap 實現(xiàn)原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • java 中 request.getSession(true、false、null)的區(qū)別

    java 中 request.getSession(true、false、null)的區(qū)別

    這篇文章主要介紹了java 中 request.getSession(true/false/null)的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Nacos?Client的Bug解決方法記錄

    Nacos?Client的Bug解決方法記錄

    這篇文章主要為大家介紹了Nacos?Client的Bug解決方法記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 聊聊SpringBoot使用Nacos進行服務(wù)注冊發(fā)現(xiàn)與配置管理問題

    聊聊SpringBoot使用Nacos進行服務(wù)注冊發(fā)現(xiàn)與配置管理問題

    Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊中心)、動態(tài)配置服務(wù)(可以做配置中心)、動態(tài)?DNS?服務(wù)。本文重點給大家介紹SpringBoot使用Nacos進行服務(wù)注冊發(fā)現(xiàn)與配置管理,感興趣的朋友一起看看吧
    2022-01-01
  • Java關(guān)系操作符簡寫介紹

    Java關(guān)系操作符簡寫介紹

    下面小編就為大家?guī)硪黄狫ava關(guān)系操作符簡寫介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • servlet 解決亂碼問題

    servlet 解決亂碼問題

    這篇文章主要介紹了servlet 解決亂碼問題 ,需要的朋友可以參考下
    2015-04-04
  • Java基礎(chǔ)入門總結(jié)之序列化和反序列化

    Java基礎(chǔ)入門總結(jié)之序列化和反序列化

    序列化是一種對象持久化的手段,普遍應(yīng)用在網(wǎng)絡(luò)傳輸、RMI等場景中,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)入門總結(jié)之序列化和反序列化的相關(guān)資料,需要的朋友可以參考下
    2022-02-02

最新評論

城固县| 莱芜市| 曲沃县| 益阳市| 泰兴市| 木兰县| 乌苏市| 邻水| 玉溪市| 安庆市| 安塞县| 遂川县| 勐海县| 阿荣旗| 九寨沟县| 游戏| 临武县| 泾阳县| 肃南| 锦屏县| 台北市| 石楼县| 密云县| 油尖旺区| 迁西县| 梅河口市| 德令哈市| 商水县| 林芝县| 子洲县| 明星| 铁力市| 霍山县| 双桥区| 张家界市| 邵阳市| 济南市| 伊金霍洛旗| 海南省| 河北区| 咸阳市|