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

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

 更新時(shí)間:2023年04月06日 11:27:57   作者:Gujiu?。? 
這篇文章主要介紹了Spring的讀取和存儲(chǔ)對(duì)象,獲取 bean 對(duì)象也叫做對(duì)象裝配,是把對(duì)象取出來放到某個(gè)類中,有時(shí)候也叫對(duì)象注?,想進(jìn)一步了解的同學(xué)可以參考本文

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

獲取 Bean 對(duì)象 (對(duì)象裝配)

獲取 bean 對(duì)象也叫做對(duì)象裝配,是把對(duì)象取出來放到某個(gè)類中,有時(shí)候也叫對(duì)象注?。

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

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

我們先創(chuàng)建如下幾個(gè)包和幾個(gè)類:

屬性注入

屬性注?是使? @Autowired 實(shí)現(xiàn)的,將 Service 類注?到 Controller 類中.

@Controller
public class StudentController {
    // 1.使用屬性注入的方式獲取 Bean
    @Autowired
    private StudentService studentService;

    public void sayHi() {
        // 調(diào)用 service 方法
        studentService.sayHi();
    }
}

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

實(shí)現(xiàn)簡(jiǎn)單, 使用簡(jiǎn)單.

缺點(diǎn):

  • 功能性問題: 不能注入不可變 (final) 對(duì)象.

在 Java 中 final 對(duì)象(不可變)要么直接賦值,要么在構(gòu)造方法中賦值,所以當(dāng)使用屬性注入 final 對(duì)象時(shí),它不符合 Java 中 final 的使用規(guī)范,所以就不能注入成功了。

  • 通用性問題: 只能適應(yīng)于 IoC 容器.
  • 設(shè)計(jì)原則問題: 更容易違背單一設(shè)計(jì)原則. (針對(duì)對(duì)象是類)

單一設(shè)計(jì)原則:

  • 針對(duì)于類級(jí)別
  • 針對(duì)于方法級(jí)別

構(gòu)造方法注入

從 Spring 4.x 之后, Spring 官方推薦使用構(gòu)造方法注入的形式.

@Controller
public class StudentController {
    // 2.構(gòu)造方法注入
    private StudentService studentService;
    
    // @Autowired 可省略
	@Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 調(diào)用 service 方法
        studentService.sayHi();
    }
}

# 注意 #

  • @Autowired 可省略.
  • 但是如果類中有多個(gè)構(gòu)造?法,那么需要添加 @Autowired 來明確指定到底使?哪個(gè)構(gòu)造?法,否則程序會(huì)報(bào)錯(cuò).

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

  • 可注入不可變對(duì)象.

  • 注入對(duì)象不會(huì)被修改.
    • 加了 final 修飾符.
    • 構(gòu)造方法是隨著類加載只執(zhí)行一次的.
  • 注入對(duì)象會(huì)被完全初始化. (使用構(gòu)造方法帶來的優(yōu)點(diǎn))
  • 通用性更好.

缺點(diǎn):

沒有屬性注入實(shí)現(xiàn)簡(jiǎn)單.

Setter 注入

Setter 注?和屬性的 Setter ?法實(shí)現(xiàn)類似,只不過在設(shè)置 set ?法的時(shí)候需要加上 @Autowired 注解.

@Controller
public class StudentController {
    // 3.setter 注入
    private StudentService studentService;

    @Autowired
    public void setStudentService(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 調(diào)用 service 方法
        studentService.sayHi();
    }
}

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

更加符合單一設(shè)計(jì)原則. (針對(duì)對(duì)象是方法級(jí)別)

缺點(diǎn):

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

set 方法是普通 set 方法, 可以被重復(fù)調(diào)用, 有被修改的風(fēng)險(xiǎn).

小結(jié): 日常開發(fā)當(dāng)中, 使用屬性注入實(shí)現(xiàn)更簡(jiǎn)單的讀取 Bean, 依然是主流的實(shí)現(xiàn)方式.

@Resource 關(guān)鍵字

在進(jìn)?類注?時(shí),除了可以使? @Autowired 關(guān)鍵字之外,我們還可以使? @Resource 進(jìn)?注?.

@Controller
public class StudentController {
    @Resource 
    private StudentService studentService;

    public void sayHi() {
        // 調(diào)用 service 方法
        studentService.sayHi();
    }
}

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

相同點(diǎn): 都是用來實(shí)現(xiàn)依賴注入的.

不同點(diǎn):

  • 功能支持不同: @Autowired 支持屬性注入, setter 注入, 構(gòu)造方法注入; @Resource 只支持屬性注入和 setter 注入, 不支持構(gòu)造方法注入.
  • 出身不同: @Autowired 來自于 Spring 框架; 而 @Resource 來自于 JDK.
  • 參數(shù)支持不同: @Resource 支持更多的參數(shù)設(shè)置; 而 @Autowired 只支持 required 參數(shù).

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

當(dāng)出現(xiàn)以下多個(gè) Bean,返回同?對(duì)象類型時(shí)程序會(huì)報(bào)錯(cuò)

此時(shí)我們運(yùn)行:

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("spring-config.xml");
        StudentController studentController =
                applicationContext.getBean("studentController", StudentController.class);
        studentController.func();
    }
}

# 注意 # 會(huì)報(bào)錯(cuò), 報(bào)錯(cuò)的原因是,非唯一的 Bean 對(duì)象。

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

解決同?個(gè)類型,多個(gè) Bean 的解決?案有以下兩個(gè):

  • 使? @Resource(name="student1") 定義.
  • 使? @Qualifier注解定義名稱.

# 使? @Resource(name="student1") 定義.

@Controller
public class StudentController {
    
    @Resource(name = "student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}

# 使? @Qualifier 注解定義名稱.

@Controller
public class StudentController {
    
    @Resource
    @Qualifier("student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}

# 如果我們想用 @Autowired 可以寫成:

@Autowired 
private Student student1;
// 存在有耦合性問題

以上就是今天要講的內(nèi)容了,希望對(duì)大家有所幫助,如果有問題歡迎評(píng)論指出,會(huì)積極改正??!

到此這篇關(guān)于Java之Spring簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象的文章就介紹到這了,更多相關(guān)Java Spring讀取和存儲(chǔ)對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDK19新特性使用實(shí)例詳解

    JDK19新特性使用實(shí)例詳解

    這篇文章主要為大家介紹了JDK19新特性使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Maven之導(dǎo)入thymeleaf依賴飄紅問題及解決

    Maven之導(dǎo)入thymeleaf依賴飄紅問題及解決

    這篇文章主要介紹了Maven之導(dǎo)入thymeleaf依賴飄紅問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java lambda list轉(zhuǎn)換map時(shí),把多個(gè)參數(shù)拼接作為key操作

    Java lambda list轉(zhuǎn)換map時(shí),把多個(gè)參數(shù)拼接作為key操作

    這篇文章主要介紹了Java lambda list轉(zhuǎn)換map時(shí),把多個(gè)參數(shù)拼接作為key操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 一篇文章帶你了解Java泛型的super和extends

    一篇文章帶你了解Java泛型的super和extends

    這篇文章主要介紹了Java泛型extends及super區(qū)別實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 文件上傳SpringBoot后端MultipartFile參數(shù)報(bào)空問題的解決辦法

    文件上傳SpringBoot后端MultipartFile參數(shù)報(bào)空問題的解決辦法

    這篇文章主要介紹了文件上傳SpringBoot后端MultipartFile參數(shù)報(bào)空問題的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringSessionRedis配置及發(fā)現(xiàn)的問題講解

    SpringSessionRedis配置及發(fā)現(xiàn)的問題講解

    今天小編就為大家分享一篇關(guān)于SpringSessionRedis配置及發(fā)現(xiàn)的問題講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Mybatis日期格式自動(dòng)轉(zhuǎn)換需要用到的兩個(gè)注解說明

    Mybatis日期格式自動(dòng)轉(zhuǎn)換需要用到的兩個(gè)注解說明

    這篇文章主要介紹了Mybatis日期格式自動(dòng)轉(zhuǎn)換需要用到的兩個(gè)注解說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java SpringBoot整合SpringCloud

    Java SpringBoot整合SpringCloud

    SpringCloud專注于為典型的用例和擴(kuò)展機(jī)制提供良好的開箱即用體驗(yàn),今天小編就帶大家認(rèn)識(shí)SpringCloud都有些什么特點(diǎn),感興趣的小伙伴留下來閱讀全文吧
    2021-09-09
  • java spark文件讀取亂碼問題的解決方法

    java spark文件讀取亂碼問題的解決方法

    這篇文章主要為大家詳細(xì)介紹了java spark文件讀取亂碼問題的相關(guān)解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • Java獲得元素屬性的注解信息的步驟

    Java獲得元素屬性的注解信息的步驟

    在Java編程中,注解是一種為代碼添加元數(shù)據(jù)的方式,通過反射機(jī)制,我們可以獲取元素屬性上的注解信息,這個(gè)過程對(duì)于框架開發(fā)和元數(shù)據(jù)處理非常有用,能夠?qū)崿F(xiàn)更靈活的功能,對(duì)java獲得元素屬性的注解信息相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-09-09

最新評(píng)論

杭锦旗| 静海县| 板桥市| 辽阳市| 镇沅| 营口市| 涟源市| 陆良县| 武鸣县| 红安县| 依兰县| 朝阳区| 皮山县| 普安县| 吉林省| 阜南县| 兰坪| 茶陵县| 蒙阴县| 甘肃省| 丹凤县| 沙雅县| 凤山县| 屏边| 翁牛特旗| 银川市| 丹阳市| 普定县| 克东县| 融水| 黑山县| 钦州市| 类乌齐县| 太和县| 清涧县| 民和| 汽车| 体育| 内江市| 格尔木市| 岱山县|