日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10

發布時間:2025/3/21 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Bean的作用域

Spring在初始化一個Bean實例時,可以同時為其指定特定的作用域。作用域將會對Bean的生命周期和創建方式產生影響。

Bean的作用域類型:

Singleton作用域是Spring容器默認的作用域,當一個Bean的作用域為Singleton時,Spring容器中只會存在一個共享的Bean實例。并且對于所有的Bean請求,只要id與該bean定義的ID屬性值相匹配,就會返回bean的同一個實例。單例模式對于無會話狀態的Bean,如Dao、Service,是理想的選擇。

spring默認就是Singleton模式。

我們查看Spring的配置文件,里面定義了bean id和對應的class實現類,同時指定了scope。

接下來在包中創建一個名為Hello的類,里面不寫任何方法(默認會創建一個無參構造函數)。

接下來寫一個測試類,里面兩次獲取bean對象并打印,如下所示:

運行測試類,查看輸出結果,得到的對象名稱相同,說明Spring容器只創建一個Hello類的實例。其實,不寫scope=singleton,默認也只創建一個實例,這是Spring的默認配置。

對于想保持會話狀態的bean,應該使用prototype作用域。在這種模式下,Spring會為每個對該Bean的請求都創建一個實例。

我們將上面實例中的scope修改成prototype,再看輸出,會發現兩次打印的不同,說明創建了兩個不同的Bean實例。

二、Bean的生命周期

Sping對singleton和prototype的生命周期管理是不一樣的。

對singleton作用域下的bean生命周期,進行全生命周期管理。

對于prototype作用域下的bean生命周期管理,只負責創建。創建后,Spring容器將不再跟蹤其生命周期。

Bean的生命周期管理如下所示:

上圖一共展現了12步,解釋如下所示:

三、Bean的裝配方式(依賴注入方式)

Bean的裝配方式有三種:

  • 1.基于XML的裝配

  • 2.基于Annotation方式

  • 3.自動裝配

1.基于XML的裝配

在XML的裝配模式下,又分為:

1.1 設值注入(Setter Injection),Bean必須滿足:

  • Bean類必須提供一個默認的構造方法

  • Bean類必須為需要注入的屬性提供對應的setter方法。

1.2 構造注入(Constructor Injection)

在Spring的配置文件中,使用元素的子元素元素為每個屬性注入值。

在真實的使用中,1.1和1.2往往結合使用。

為了方便理解,我們看一段代碼。

如下圖所示,我們創建了一個User類,里面包含了Username和Password的設置值和獲取值的方法:?

下圖中,定義了一個有參構造方法,傳入的參數是username和password。

下圖中@Override后面的代碼,作用是當測試類調用User類時,打印username和password的內容:

接下來,我們再看一下Spring的配置文件:bean5.xml。我們看到包含兩部分內容:

第一部分是通過構造方式裝配user實例,同時進行了賦值,bean id是user1

第二部分是使用Set方式裝配user實例,這段也進行了賦值,但我們看到和第一部分內容不同,bean id是user2:

書寫一個測試類。我們看到測試類先通過應用上下文加載xml文件,然后獲取user1和user2的實例,并進行打印:

2.基于Annotation的裝配

Spring可以使用XML實現Bean的裝配工作,但如果bean太多,XML文件就會比較臃腫。JDK1.5開始,提供了annotation功能,Spring也全面支持。常見的注解如下:

接下來我們看代碼:

首先創建一個接口,名為UserDao

接下來創建一個接口實現類,名為UserDaoImpl。

我們看到上圖中第三行有@Repositiory(“userDao”),這是將UserDaoImpl這個類標示為Spring中的Bean,這行代碼的作用,相當于在XML中這樣寫:

接下來,創建一個名為UserService的接口:

接下來,創建UserService的接口的實現類:UserServiceImpl。

下圖中第4行相當于XML中:

<bean id="userService" class="cn.itcast.annotation.UserServiceImpl"/>

下圖中第6行相當于配置文件中:

類的最后,調用了userDao中的save()方法。

接下來,創建UserAction類。

下圖第四行使用@Controler注解標注UserAction類相當于XML中:

serAction" class="cn.itcast.annotation.UserAction"/

下圖第六行相當于:

userService"/>。

【ref的作用是:property、contructor-arg等元素的子元素,該元素中的bean屬性用于指定Bean工廠中某個Bean實例的引用】

最后調用了userService的save()方法:

接下來,創建beans6.xml.

配置文件的作用是啟動compont scan,并且是在cn.itcast.annotation目錄下掃描(我們之前創建的幾個bean都在這個目錄下):

接下來,創建測試類:

我們看到測試類會先加載beans6.xml。

第15行獲取UserAction的實例:userAction。

上圖第18行是輸出userAction的實例;

上圖第19行是調用userAction中的save()方法---->調用userservice中的save()方法--->調用userdao中的save()方法--->打印:"userdao...save..."

然后,每個類還有自己的打印內容,因此最終的打印內容是:

3.自動裝配

自動裝配是:將一個Bean注入到其他Bean的Property中。這需要使用到元素的autowire屬性,它的五個值是:

我們基于上一小節是示例,改造配置文件:

上圖中即通過autowire="byName"的字段,實現通過bean id名自動裝配。

使用這種方式后,實際上面UserServiceImpl、UserAction兩個類中的源碼中,實現ref部分的代碼就可以刪除了,如:


參考文獻:

《SSH框架整合實戰教程》-清華大學出版社

總結

以上是生活随笔為你收集整理的spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。