欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解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)文章

  • 通過java反射機制動態(tài)調(diào)用某方法的總結(jié)(推薦)

    通過java反射機制動態(tài)調(diào)用某方法的總結(jié)(推薦)

    下面小編就為大家?guī)硪黄ㄟ^java反射機制動態(tài)調(diào)用某方法的總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • SpringBoot中使用Knife4J的解決方案

    SpringBoot中使用Knife4J的解決方案

    knife4j是為Java?MVC框架集成Swagger生成Api文檔的增強解決方案,這篇文章主要介紹了SpringBoot中使用Knife4J,需要的朋友可以參考下
    2022-10-10
  • Java實現(xiàn)多線程大批量同步數(shù)據(jù)(分頁)

    Java實現(xiàn)多線程大批量同步數(shù)據(jù)(分頁)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)多線程大批量同步數(shù)據(jù)(分頁),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java日常練習(xí)題,每天進步一點點(40)

    Java日常練習(xí)題,每天進步一點點(40)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 分布式開發(fā)醫(yī)療掛號系統(tǒng)數(shù)據(jù)字典模塊前后端實現(xiàn)

    分布式開發(fā)醫(yī)療掛號系統(tǒng)數(shù)據(jù)字典模塊前后端實現(xiàn)

    這篇文章主要為大家介紹了分布式開發(fā)醫(yī)療掛號系統(tǒng)數(shù)據(jù)字典模塊前后端實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Java?WebService開源框架CXF詳解

    Java?WebService開源框架CXF詳解

    本文詳細(xì)講解了Java?WebService開源框架CXF,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Java lambda表達式實現(xiàn)Flink WordCount過程解析

    Java lambda表達式實現(xiàn)Flink WordCount過程解析

    這篇文章主要介紹了Java lambda表達式實現(xiàn)Flink WordCount過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot整合liquibase的實現(xiàn)方法

    SpringBoot整合liquibase的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot整合liquibase的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java中main函數(shù)你知道多少

    java中main函數(shù)你知道多少

    大家好,本篇文章主要講的是java中main函數(shù)你知道多少,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • springboot整合Quartz實現(xiàn)動態(tài)配置定時任務(wù)的方法

    springboot整合Quartz實現(xiàn)動態(tài)配置定時任務(wù)的方法

    本篇文章主要介紹了springboot整合Quartz實現(xiàn)動態(tài)配置定時任務(wù)的方法,非常具有實用價值,需要的朋友可以參考下
    2017-10-10

最新評論