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

Spring的存儲(chǔ)與獲取Bean

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

關(guān)于 Spring 的創(chuàng)建及簡(jiǎn)單的使用
可以參考這篇文章

??Spring—存儲(chǔ)Bean


之前的存儲(chǔ)方式是利用<bean id="" class=""></bean>進(jìn)行存儲(chǔ)

但這種方式存在一個(gè)弊端

即需要存儲(chǔ)的 Bean 過(guò)多時(shí), 手動(dòng)添加過(guò)于繁瑣

利用注解可以有效規(guī)避這種情況

  • 添加注解存儲(chǔ) Bean
    • 類注解
      • @Controller: 控制器存儲(chǔ)
      • @Service: 服務(wù)存儲(chǔ)
      • @Repository: 倉(cāng)庫(kù)存儲(chǔ)
      • @Component: 組件存儲(chǔ)
      • @Configuration: 配置存儲(chǔ)
    • 方法注解
      • @Bean: 對(duì)象存儲(chǔ)(需搭配類注解一同使用)

配置掃描路徑


添加如下代碼至xml文件中

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

base-package=""
引號(hào)中填寫(xiě)的是掃描路徑

完整代碼

<?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=""></content:component-scan>

</beans>

如圖
base-package="com.demo"
掃描路徑為com包下的demo包下的全部

Spring的存儲(chǔ)與獲取Bean

所有的類都寫(xiě)在 Java 根路徑下, 沒(méi)有目錄, 該如何存儲(chǔ) / 獲取 Bean??

(了解即可, 通常不會(huì)這么做)

base-package="**"

將掃描路徑更改為根目錄下的全部

*表示根目錄
**表示根目錄下的全部

利用類注解進(jìn)行存儲(chǔ)


在 Spring Core 中, 類注解之間的區(qū)別不大

添加注解存儲(chǔ)Bean


添加 @Controller 注解存儲(chǔ) Bean

Spring的存儲(chǔ)與獲取Bean

獲取 Bean

Spring的存儲(chǔ)與獲取Bean

添加 @Service 注解存儲(chǔ) Bean

Spring的存儲(chǔ)與獲取Bean

獲取 Bean

Spring的存儲(chǔ)與獲取Bean

添加 @Repository 注解存儲(chǔ) Bean

Spring的存儲(chǔ)與獲取Bean

獲取 Bean

Spring的存儲(chǔ)與獲取Bean

添加 @Component 注解存儲(chǔ) Bean

Spring的存儲(chǔ)與獲取Bean

獲取 Bean

Spring的存儲(chǔ)與獲取Bean

添加 @Configuration 注解存儲(chǔ) Bean

Spring的存儲(chǔ)與獲取Bean

獲取 Bean

Spring的存儲(chǔ)與獲取Bean

關(guān)于Id


通過(guò)添加注解的方式存儲(chǔ) Bean, 獲取 Bean 時(shí)的 Id 該如何命名??

  • 當(dāng)類名為標(biāo)準(zhǔn)駝峰命名時(shí), 將類名的首字母小寫(xiě), 其余字母不變
    • (例如類名為UserInfo, 其對(duì)應(yīng)的IduserInfo)
  • 當(dāng)類名的首字母為小寫(xiě)時(shí), 不做改變
    • (例如類名為userInfo, 其對(duì)應(yīng)的IduserInfo)
  • 當(dāng)類名的首字母和第二個(gè)字母均為大寫(xiě), 不做改變
    • (例如類名為UInfo, 其對(duì)應(yīng)的IdUInfo)

源碼分析??

  • AnnotationBeanNameGenerator
    • Annotation, 注解
    • BeanName, 對(duì)象名
    • Generator, 生成
    • Annotation BeanName Generator, 生成對(duì)象名注解

Spring的存儲(chǔ)與獲取Bean

找到AnnotationBeanNameGeneratorgenerateBeanName()
點(diǎn)擊buildDefaultBeanName()

Spring的存儲(chǔ)與獲取Bean

點(diǎn)擊buildDefaultBeanName()

Spring的存儲(chǔ)與獲取Bean

點(diǎn)擊decapitalize()

Spring的存儲(chǔ)與獲取Bean

找到最終的調(diào)用方法

Spring的存儲(chǔ)與獲取Bean

分析這段代碼

public static String decapitalize(String name) {
    if (name == null || name.length() == 0) {
        return name;
    }
    if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                    Character.isUpperCase(name.charAt(0))){
        return name;
    }
    char chars[] = name.toCharArray();
    chars[0] = Character.toLowerCase(chars[0]);
    return new String(chars);
}
  • if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) && Character.isUpperCase(name.charAt(0))){ return name; }

如果長(zhǎng)度 > 1 且第 1 個(gè)字符與第 0 個(gè)字符均是大寫(xiě), 返回該字符串

(當(dāng)類名的首字母和第二個(gè)字母均為大寫(xiě), 不做改變)

  • chars[0] = Character.toLowerCase(chars[0]);

將第 0 個(gè)字符變?yōu)樾?xiě)

(當(dāng)類名為標(biāo)準(zhǔn)駝峰命名時(shí), 將類名的首字母小寫(xiě), 其余字母不變)
(當(dāng)類名的首字母為小寫(xiě)時(shí), 不做改變)

為什么需要五個(gè)類注解


既然都可以通過(guò)添加類注解的方式存儲(chǔ) Bean
那為何還需要五個(gè)類注解呢?

  1. 通過(guò)類注解可以了解當(dāng)前類的用途
  2. 具體的功能存在差異

舉個(gè)栗子??

通過(guò)車牌可以了解是哪里的車??, 例如 京 → 北京, 津 → 天津
(通過(guò)類注解可以了解當(dāng)前類的用途)

類注解的用途??

  1. @Controller(控制器), 歸屬于業(yè)務(wù)邏輯層, 用于校驗(yàn)用戶參數(shù)的有效性(控制用戶的行為)
  2. @Service(服務(wù)), 歸屬于服務(wù)層, 調(diào)用持久化類實(shí)現(xiàn)相應(yīng)的功能(不直接與數(shù)據(jù)庫(kù)交互, 類似于控制中心)
  3. @Repository(倉(cāng)庫(kù)), 歸屬于持久層, 直接與數(shù)據(jù)庫(kù)交互(通常一張表對(duì)應(yīng)一個(gè) @Repository)
  4. @Configuration(配置), 歸屬于配置層, 用于配置當(dāng)前項(xiàng)目的一些信息
  5. @Component(組件), 歸屬于公共工具類, 提供某些公共方法

舉個(gè)栗子??

滑稽老哥家中失竊, 選擇報(bào)警
接警員判斷情況是否屬實(shí), 避免小孩子的惡作劇
(@Controller)

警局根據(jù)接警員的信息派出一些警察負(fù)責(zé)跟進(jìn)
(@Service)

出警的警察負(fù)責(zé)這一起案件
(@Repository)

Spring的存儲(chǔ)與獲取Bean

類注解之間的關(guān)系


@Component 是 @Controller, @Service, @Repository, @Configuration 的父類

Spring的存儲(chǔ)與獲取Bean

利用方法注解進(jìn)行存儲(chǔ)


方法注解需搭配類注解一同使用
(目的是為了提高效率)

新建一個(gè) Student 類

Spring的存儲(chǔ)與獲取Bean

新建一個(gè) StudentBeans 類

為 getStu() 添加方法注解(@Bean)
為 StudentBeans 添加類注解(@Component)

Spring的存儲(chǔ)與獲取Bean

關(guān)于Id


  • 默認(rèn)情況下 getBean() 對(duì)應(yīng)的 Id 為方法名
  • @Bean 后可以跟 name
    • (例如 @Bean(name = {"s1", "s2"}))
  • 當(dāng) @Bean 后添加了 name 時(shí), 所對(duì)應(yīng)的 Id 只能為 name 名, 不允許設(shè)置為方法名

默認(rèn)情況下 getBean() 對(duì)應(yīng)的 Id 為方法名

Spring的存儲(chǔ)與獲取Bean

@Bean 后可以跟 name

Spring的存儲(chǔ)與獲取Bean

??Spring—獲取Bean


從 Spring 中獲取 Bean 也稱為對(duì)象裝配, 對(duì)象注入

對(duì)象裝配(對(duì)象注入)的方式可以劃分為 3 種

  • 屬性注入
  • Set 注入
  • 構(gòu)造方法注入

屬性注入


Spring的存儲(chǔ)與獲取Bean

屬性注入的效果等同于賦值

舉個(gè)栗子??

@Autowired
private StudentService studentService;

private int num = 10;

StudentService studentService利用屬性注入, 由 Spring 框架賦值
int num未利用屬性注入, 由程序員賦值

綜上, 再次說(shuō)明了 Spring 是一個(gè)包含眾多工具方法的 IOC 容器
(IOC → 控制反轉(zhuǎn))

屬性注入的優(yōu)點(diǎn)??

  • 實(shí)現(xiàn)簡(jiǎn)單

屬性注入的缺點(diǎn)??

  • 不能注入不可變對(duì)象(final 修飾)
  • 只適用于 IOC 容器
  • 更容易違背單一設(shè)計(jì)原則

不能注入不可變對(duì)象(final 修飾)

final 修飾的對(duì)象有 2 種賦值方式

  1. 直接賦值
  2. 在構(gòu)造方法中賦值

只適用于 IOC 容器

@Autowired 來(lái)自于 Spring
Spring 是一個(gè)包含眾多工具方法的 IOC 容器
因此只適用于 IOC 容器

更容易違背單一設(shè)計(jì)原則

屬性注入的方式實(shí)現(xiàn)簡(jiǎn)單
因此也更容易將其他無(wú)關(guān)的對(duì)象一并注入
也就更容易違背單一設(shè)計(jì)原則

Set注入


Spring的存儲(chǔ)與獲取Bean

Set 注入的優(yōu)點(diǎn)??

  • 更符合單一設(shè)計(jì)原則

Set 注入的缺點(diǎn)??

  • 不能注入不可變對(duì)象(final 修飾)
  • 注入的對(duì)象可被修改

更符合單一設(shè)計(jì)原則

Set 注入的實(shí)現(xiàn)方式相比于屬性注入較復(fù)雜
因此相較于屬性注入也就避免了將其他無(wú)關(guān)的對(duì)象一并注入的情況
(更符合單一設(shè)計(jì)原則)

不能注入不可變對(duì)象(final 修飾)

final 修飾的對(duì)象有 2 種賦值方式

  1. 直接賦值
  2. 在構(gòu)造方法中賦值

注入的對(duì)象可被修改

Set 注入相較于屬性注入更危險(xiǎn)!

屬性注入的對(duì)象也可被修改
但 Set 注入除通過(guò)屬性注入的方式修改注入的對(duì)象
也可通過(guò) set() 方法修改注入的對(duì)象

set() 方法既可以被 Spring 調(diào)用
也可以被其他對(duì)象調(diào)用

構(gòu)造方法注入


Spring的存儲(chǔ)與獲取Bean

注意

  1. 當(dāng)只存在一個(gè)構(gòu)造方法時(shí), @Autowired 可省略
  2. 當(dāng)存在多個(gè)構(gòu)造方法時(shí), @Autowired 不可省略

構(gòu)造方法注入的優(yōu)點(diǎn)??

  • 能注入不可變對(duì)象(final 修飾)
  • 注入的對(duì)象不可被修改
    • final 修飾
    • 構(gòu)造方法隨著類的加載只執(zhí)行一次
  • 注入的對(duì)象會(huì)被完全初始化(類加載時(shí)就會(huì)將對(duì)象進(jìn)行初始化, 當(dāng)執(zhí)行其他方法時(shí), 對(duì)象已被初始化 → 構(gòu)造方法的機(jī)制)
  • 通用性更好(任何一個(gè)類都會(huì)有構(gòu)造方法)

構(gòu)造方法注入的缺點(diǎn)??

  • 實(shí)現(xiàn)方式不如屬性注入簡(jiǎn)單

總結(jié)(Spring的注入方式? 它們之間的區(qū)別?)

Spring的存儲(chǔ)與獲取Bean

@Resource


  • @Resource
    • 可以實(shí)現(xiàn)屬性注入
    • 可以實(shí)現(xiàn) Set 注入
    • 不可以實(shí)現(xiàn)構(gòu)造方法注入

使用 @Resource 實(shí)現(xiàn)屬性注入

Spring的存儲(chǔ)與獲取Bean

使用 @Resource 實(shí)現(xiàn) Set 注入

Spring的存儲(chǔ)與獲取Bean

使用 @Resource 不能實(shí)現(xiàn)構(gòu)造方法注入

Spring的存儲(chǔ)與獲取Bean

Spring的存儲(chǔ)與獲取Bean

對(duì)比@Resource與@Autowired

Spring的存儲(chǔ)與獲取Bean

來(lái)源不同??

@Resource

Spring的存儲(chǔ)與獲取Bean

Spring的存儲(chǔ)與獲取Bean

@Autowired

Spring的存儲(chǔ)與獲取Bean

支持參數(shù)不同??

@Resource

Spring的存儲(chǔ)與獲取Bean

@Autowired

Spring的存儲(chǔ)與獲取Bean

Tips


存在返回同一個(gè)類型的多個(gè)方法時(shí)

Spring的存儲(chǔ)與獲取Bean

利用@Resource(name = "")可以將其進(jìn)行區(qū)分

Spring的存儲(chǔ)與獲取Bean

@Autowired 無(wú)法設(shè)置 name

只能填寫(xiě)對(duì)應(yīng)的對(duì)象

Spring的存儲(chǔ)與獲取Bean

如果想寫(xiě)成 student 形式
需搭配@Qualifier()進(jìn)行使用, 括號(hào)中填寫(xiě)的內(nèi)容為對(duì)應(yīng)的對(duì)象

Spring的存儲(chǔ)與獲取Bean

??結(jié)尾

創(chuàng)作不易,如果對(duì)您有幫助,希望您能點(diǎn)個(gè)免費(fèi)的贊??
大家有什么不太理解的,可以私信或者評(píng)論區(qū)留言,一起加油文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-488396.html

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

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(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框架】Spring讀取與存儲(chǔ)綜合練習(xí)

    【Spring框架】Spring讀取與存儲(chǔ)綜合練習(xí)

    在 Spring 項(xiàng)?中,通過(guò) main ?法獲取到 Controller 類,調(diào)? Controller ??通過(guò)注?的?式調(diào)? Service 類,Service 再通過(guò)注?的?式獲取到 Repository 類,Repository 類??有?個(gè)?法構(gòu)建?個(gè) User 對(duì)象,返回給 main ?法。Repository ?需連接數(shù)據(jù)庫(kù),使?偽代碼即可。 User類 UserControlle

    2024年02月15日
    瀏覽(16)
  • Android 獲取內(nèi)部存儲(chǔ)中音樂(lè)文件的正確姿勢(shì)

    Android 獲取內(nèi)部存儲(chǔ)中音樂(lè)文件的正確姿勢(shì)

    最近想寫(xiě)一個(gè)音樂(lè)的小APP出來(lái)(doge),借此熟悉音頻開(kāi)發(fā)的相關(guān)技術(shù)。但是在獲取 內(nèi)部存儲(chǔ)的音樂(lè)文件 時(shí)踩了一些坑...所以有了這篇帖子,簡(jiǎn)單介紹下Android的存儲(chǔ)類別,以及如何獲取內(nèi)部存儲(chǔ)中的音樂(lè)文件。 首先要理解一個(gè)概念, 內(nèi)存≠內(nèi)部存儲(chǔ) 。 內(nèi)存 - 程序運(yùn)行是內(nèi)

    2024年02月08日
    瀏覽(31)
  • 微信小程序獲取收貨地址及存儲(chǔ)收貨地址

    這個(gè)城市數(shù)據(jù)的js直接放網(wǎng)盤(pán)了我 鏈接:https://pan.baidu.com/s/18UsJ1VUxEI-7LJjVW8BW4w? 提取碼:mmao wxml wxss

    2024年02月15日
    瀏覽(25)
  • 【Spring】(三)Spring 使用注解存儲(chǔ)和讀取 Bean對(duì)象

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

    前面的文章詳細(xì)的介紹了 Spring 對(duì)象的創(chuàng)建,以及對(duì) Bean 對(duì)象的存取操作,但是通過(guò)配置文件注冊(cè) Bean 對(duì)象以及使用 ApplicationContext 或 BeanFactory 的方式獲取 Bean 對(duì)象的操作就顯得格外的復(fù)雜。因此,本文主要就是詳細(xì)介紹了一種更加簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)對(duì) Bean 對(duì)象更加簡(jiǎn)單的儲(chǔ)

    2024年02月14日
    瀏覽(19)
  • Unity記錄4.2-存儲(chǔ)-從json文件獲取Tile路徑

    文章首發(fā)見(jiàn)博客:https://mwhls.top/4813.html。 無(wú)圖/格式錯(cuò)誤/后續(xù)更新請(qǐng)見(jiàn)首發(fā)頁(yè)。 更多更新請(qǐng)到mwhls.top查看 歡迎留言提問(wèn)或批評(píng)建議,私信不回。 匯總:Unity 記錄 摘要:從json文件獲取Tile材質(zhì)路徑。 確定保存方案-2023/08/15 詢問(wèn)了GPT,它說(shuō)Tilemap是根據(jù)攝像機(jī)位置進(jìn)行渲染,所

    2024年02月10日
    瀏覽(53)
  • Spring使用注解存儲(chǔ)Bean對(duì)象

    Spring使用注解存儲(chǔ)Bean對(duì)象

    在前一篇博客中( Spring項(xiàng)目創(chuàng)建與Bean的存儲(chǔ)與讀取(DL))介紹的是通過(guò)配置文件注冊(cè)對(duì)象從而存儲(chǔ)到 Spring 中,這種方式其實(shí)還是挺繁瑣的。 實(shí)際上,在使用學(xué)習(xí)使用 Spring過(guò)程中,當(dāng)我們要實(shí)現(xiàn)一個(gè)功能的時(shí)候,先應(yīng)該考慮的是有沒(méi)有相應(yīng)的注解是實(shí)現(xiàn)對(duì)應(yīng)功能的,Spring 中

    2024年02月16日
    瀏覽(22)
  • Spring使用注解存儲(chǔ)和讀取對(duì)象

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

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

    2023年04月19日
    瀏覽(26)
  • 【Spring框架全系列】Spring更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象

    【Spring框架全系列】Spring更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象

    ????哈嘍,大家好,我是小浪。上篇博客我們介紹了如何創(chuàng)建一個(gè)spring項(xiàng)目,并且如何的存、取對(duì)象,介紹了相關(guān)方法,那么本篇博客將接著上篇博客的內(nèi)容介紹如何更加簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象。 ??在 Spring 中想要更簡(jiǎn)單的存儲(chǔ)和讀取對(duì)象的核?是使?注解,也就是我們接

    2024年02月05日
    瀏覽(20)
  • java獲取當(dāng)前服務(wù)器狀態(tài)cpu、內(nèi)存、存儲(chǔ)等核心信息

    java獲取當(dāng)前服務(wù)器狀態(tài)cpu、內(nèi)存、存儲(chǔ)等核心信息

    目錄 1.需要導(dǎo)入依賴包 ?2.系統(tǒng)自帶參數(shù) 3.獲取當(dāng)前服務(wù)器狀態(tài)cpu、內(nèi)存、存儲(chǔ)等核心信息 ?4.引入包后方法不存在 ?5. 獲取的cpu利用率和任務(wù)管理器cpu利用率值差距問(wèn)題 ? RESULT: RESULT: ?需要引入下面的包: ?就是需要配置在 CentralProcessor 實(shí)例化之前:配置上也會(huì)有差距,相

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

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

    在 Spring 中要想更簡(jiǎn)單的存儲(chǔ)和讀取對(duì)象 , 核心是 使用注解 , 所以我們需要通過(guò) Spring 中相關(guān)注解 , 來(lái)存儲(chǔ)和讀取 Bean 對(duì)象. 之前我們存儲(chǔ) Bean 時(shí) , 需要在 spring-config.xml 中添加一行注釋才行: 而現(xiàn)在我們只需一個(gè)注解就可以替代之前要寫(xiě)一行配置 , 不過(guò)在存儲(chǔ)對(duì)象之前 , 我們先

    2024年02月02日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包