亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Spring?中?Bean?對(duì)象的存儲(chǔ)和取出

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

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

存對(duì)象

配置文件

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

首先在項(xiàng)目中的 resources 目錄下添加一個(gè) xml 文件,名字可以自定義

隨后在這個(gè) 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>

類(lèi)注釋

在 Spring 中我們可以通過(guò)類(lèi)注釋或者方法注釋來(lái)進(jìn)行對(duì)象的存儲(chǔ),其中類(lèi)注釋是用的比較多的,類(lèi)注釋總共有 5 種:

  • @Conntroller,業(yè)務(wù)邏輯層
  • @Service,服務(wù)器存儲(chǔ)
  • @Repository,倉(cāng)庫(kù)存儲(chǔ),可以用來(lái)操作數(shù)據(jù)庫(kù)
  • @Component,項(xiàng)目組件層
  • @Configuration,配置層

這五種類(lèi)注釋的作用都是可以直接將這個(gè)類(lèi)對(duì)象儲(chǔ)存到 Spring 中,但是卻有 5 種類(lèi)注釋?zhuān)@么做的原因是:能夠讓我們看到類(lèi)注釋就能得知這個(gè)類(lèi)的大致功用

命名規(guī)則

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

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

除了上面 5 種類(lèi)注釋之外,還有方法注釋

方法注釋

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

作用:將這個(gè)方法返回的對(duì)象存入到 Spring 中

例如

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

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

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

取對(duì)象

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

屬性注入

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

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

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

這種注入方式很簡(jiǎn)單也很快,但是缺點(diǎn)不少:

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

setter 注入

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

@Controller
public class Student {

    private User user;

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

setter 注入的缺點(diǎn):

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

構(gòu)造方法注入

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

@Controller
public class Student {
    private User user;

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

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

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

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

相關(guān)文章

最新評(píng)論