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

Spring Bean配置方式總結(jié)

 更新時間:2023年12月15日 09:41:51   作者:是只菜鳥呀  
定義Spring Bcan的3種方式分別是:基于XML 的方式配置、基于注解掃播方式配置、基于元數(shù)據(jù)類的配置,本文就通過代碼示例給大家詳細(xì)講講這三種配置方式,需要的朋友可以參考下

SpringBean是Spring中最基本的組成單元,Spring 官方文檔對 Bean 的解釋是這樣的:

In Spring, the objects that form the backbone of your application and that are managed by theSpring loC container are called beans. A bean is an object that is instantiated, assembled, and managedby a Spring IoC container.

翻譯過來就是:

在Spring中,構(gòu)成應(yīng)用程序主并由SpringIoC容器管理的對象被稱為Bean。Bean是一個由SpringIoC容器實例化、組裝和管理的對象。

從官方定義中,我們可以提取出以下信息

1)Bean 是對象,一個或者多個不限定

2)Bean 托管在Spring 中一個叫作IoC的容器中

3)我們的程序是由一個個 Bean 構(gòu)成的。

Spring 是通過聲明式配置的方式來定義 Bean的,所有創(chuàng)建Bean需要的前置依賴或者參數(shù)都通過配置文件先聲明,Spring 啟動以后會解析這些聲明好的配置內(nèi)容。

那么,我們該如何定義Spring 中的 Bean呢?一般來說,Spring Bean的定義配置有3種方法。

1基于XML的方式配置,這種配置方式主要適用于以下兩類場景

(1)Bean 實現(xiàn)類來自第三方類庫,比如 DataSource 等。

(2)需要定義命名空間的配置,如 context、aop、mvc等。

舉個例子,來看一段代碼。

<beans>
    <import resource="resource1.xml"/>//導(dǎo)入其他配置文件Bean 的定義
    <import resource="resource2,xmI" />
        <bean id="userService" class="com.gp.s.UserService" init-method="init" destory-method="destory">
        </bean>
        <bean id="message”class="java.lang.String">
            <constructor-arg index="o" value="test"></constructor-arg>
        </bean>
</beans>

這段代碼是標(biāo)準(zhǔn)的 Spring 配置內(nèi)容,首先導(dǎo)入一個叫作 resourcel.xm標(biāo)準(zhǔn)配置文件。然后,導(dǎo)入第二個標(biāo)準(zhǔn)配置文件resource2.xml。接著,定義一個叫作 userService的 Bean,對應(yīng)的類是 com.gp.s.UserService,并且聲明了在userService 實例化之后要用init0方法,在userService 銷毀之后調(diào)用destory0方法。

2基于注解掃描的方式配置,這種配置方式主要適用于開發(fā)中需要引用的類,如ControleService、Dao等,配置代碼如下。

<context:component-scan base-package="com.gp.s">
    <!-- 包含的目標(biāo)類-->
    <context:include-filter type="regex” expression="com.gp.s.mall.*"/>
    <!-- 排除的目標(biāo)類-->
    <context;exclude-filter type="aspectj"
                    expression="com.gp.s.mall.*Controller+"/>
</context:component-scan>

在這段配置中,context:component-scan 相當(dāng)于使用了 Spring 內(nèi)置的掃描注解的組@ComponentScan ,聲明了需要掃描的基礎(chǔ)包路 com.gp.s ,把所有com.gp.s.mall 下面的子包全部納入掃描范圍,并且排除了 com.gp.s.mall包面所有以Controller 結(jié)尾或者包含 Controller 結(jié)尾的類
使用 Spring 容器管理組件的 beanName 規(guī)則,默認(rèn)是類名首字母變小寫,可以自己修改。

Spring 主要提供了 4 種內(nèi)置的注解來聲明 Bean。它們分別是

@Controller (聲明為控制層組件的Bean)、

@Service (聲明為業(yè)務(wù)邏輯層組件的 Bcan)、

@Repository (聲明為數(shù)據(jù)訪間層組件的當(dāng)對組件的層次難以定位的時候使用

@Component 注解來聲明。Bean)

Spring 提供了4個注解,這些注解的作用與XML定義 Bean 的作用一樣,都是將組件交給Spring 容器管理。組件的名稱默認(rèn)是類名 (首字母變小寫),可以自己修改。

3基于Java類的配置,這種配置方式主要適用于以下兩類場景。

(1)需要通過代碼控制對象創(chuàng)建邏輯的場景。

(2)實現(xiàn)零配置,消除XML 配置文件的場景

同樣還是舉個例子,來看一段代碼:

@Configurationpublic 
class BeansConfiguration {
    @Bean
    public Student student(){
        Student student = new Student();student.setName("三");
        student.setTeacher(teacher());
        return student;
    }
    @Bean
    public Teacher teacher(){
        Teacher teacher= new Teacher();
        teacher.setName("Tom");
        return teacher;
    }
}

通過分析這段代碼,可以了解到使用基于類的配置需要以下步驟。

1)在 BeansConfiguration 類上配置@Configuration 注解,表示將 BeansConfiguration 類定義為Bean的元數(shù)據(jù)。

2)在方法上使用@Bean 注解,方法名默認(rèn)就是 Bean 的名稱,方法返回值就是 Bean 的實例

3)過AmnolationConfgApplicationContext 或子類來啟動 Spring 容器,從而加載這些已聲明好的注解配置。

總結(jié)一下,定義 Spring Bcan 的3 種方式分別是:基于XML 的方式配置、基于注解掃播方式配置、基于元數(shù)據(jù)類的配置。

那么Bcan 的配置定義好以后,Spring 又是如何加載這些 Bean 配置并創(chuàng)建 Bean 實例的哪:

Spring 解析這些聲明好的配置內(nèi)容,將這些配置內(nèi)容都轉(zhuǎn)化為 BeanDefinition 對多BeanDefinilion 中幾平保存了配置文件中聲明的所有內(nèi)容,再將 BeanDefinition 保存bcanDcfinitionMap中,以beanName 作為key,以BeanDefinition 對象作為value。之后,Spring容器根據(jù) beanName找到對應(yīng)的 BeanDefinition,再去選擇具體的創(chuàng)建策略。

以上就是Spring Bean配置方式總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Spring Bean配置方式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 中的弱引用是什么

    Java 中的弱引用是什么

    這篇文章主要介紹了Java 中的弱引用是什么,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • 基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn)

    基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn)

    這篇文章主要介紹了基于Java的Socket編寫的C/S聊天程序?qū)崿F(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 一篇文章帶你入門java變量與類型

    一篇文章帶你入門java變量與類型

    這篇文章主要給大家介紹了關(guān)于Java基本知識點之變量和數(shù)據(jù)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Java中static關(guān)鍵字的作用和用法詳細(xì)介紹

    Java中static關(guān)鍵字的作用和用法詳細(xì)介紹

    這篇文章主要介紹了Java中static關(guān)鍵字的作用和用法詳細(xì)介紹,本文講解了static變量、靜態(tài)方法、static代碼塊、static和final一塊用等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • SpringBoot讀取yaml文件操作詳解

    SpringBoot讀取yaml文件操作詳解

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時,YAML 的意思其實是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java編程實現(xiàn)對象克?。◤?fù)制)代碼詳解

    Java編程實現(xiàn)對象克?。◤?fù)制)代碼詳解

    這篇文章主要介紹了Java編程實現(xiàn)對象克隆(復(fù)制)代碼詳解,涉及了克隆的原因,如何實現(xiàn)克隆,克隆的一般步驟,深克隆與淺克隆的介紹等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11
  • 基于java實現(xiàn)DFA算法代碼實例

    基于java實現(xiàn)DFA算法代碼實例

    這篇文章主要介紹了基于java實現(xiàn)DFA算法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • MyEclipse去除網(wǎng)上復(fù)制下來的代碼帶有的行號(正則去除行號)

    MyEclipse去除網(wǎng)上復(fù)制下來的代碼帶有的行號(正則去除行號)

    這篇文章主要介紹了MyEclipse去除網(wǎng)上復(fù)制下來的代碼帶有的行號(正則去除行號)的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Java學(xué)習(xí)筆記之觀察者模式

    Java學(xué)習(xí)筆記之觀察者模式

    這篇文章主要為大家詳細(xì)介紹了Java學(xué)習(xí)筆記之觀察者模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Mybatis中使用updateBatch進(jìn)行批量更新

    Mybatis中使用updateBatch進(jìn)行批量更新

    這篇文章主要介紹了Mybatis中使用updateBatch進(jìn)行批量更新的相關(guān)資料,有逐條更新,sql批量更新等,具體實例代碼大家參考下本文
    2018-04-04

最新評論