溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中Bean的定義和作用域介紹

發布時間:2021-09-04 21:05:43 來源:億速云 閱讀:194 作者:chen 欄目:大數據

這篇文章主要介紹“Spring中Bean的定義和作用域介紹”,在日常操作中,相信很多人在Spring中Bean的定義和作用域介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring中Bean的定義和作用域介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、什么是Bean

1、Java面向對象,對象有方法和屬性,那么就需要對象實例來調用方法和屬性(即實例化);
2、凡是有方法或屬性的類都需要實例化,這樣才能具象化去使用這些方法和屬性;
3、規律:凡是子類及帶有方法或屬性的類都要加上注冊Bean到Spring IoC的注解;
4、把Bean理解為類的代理或代言人(實際上確實是通過反射、代理來實現的),這樣它就能代表類擁有該擁有的東西了。
5、我們都在微博上@過某某,對方會優先看到這條信息,并給你反饋,那么在Spring中,你標識一個@符號,那么Spring就會來看看,并且從這里拿到一個Bean或者給出一個Bean

二、注解分為兩類:

1、一類是使用Bean,即是把已經在xml文件中配置好的Bean拿來用,完成屬性、方法的組裝;比如@Autowired , @Resource,可以通過byTYPE(@Autowired)、byNAME(@Resource)的方式獲取Bean;
2、一類是注冊Bean,@Component , @Repository , @ Controller , @Service , @Configration這些注解都是把你要實例化的對象轉化成一個Bean,放在IoC容器中,等你要用的時候,它會和上面的@Autowired , @Resource配合到一起,把對象、屬性、方法完美組裝。

三、Bean的定義

元素是Spring配置文件的根元素,元素是元素的子元素,元素可以包含多個子元素,每個元素可以定義一個Bean實例,每一個Bean對應Spring容器里的一個Java實例定義Bean時通常需要指定兩個屬性。

Spring容器集中管理Bean的實例化,Bean實例可以通過BeanFactory的getBean(Stringbeanid)方法得到。BeanFactory是一個工廠,程序只需要獲取BeanFactory引用,即可獲得Spring容器管理全部實例的引用。程序不需要與具體實例的實現過程耦合。大部分Java EE應用里,應用在啟動時,會自動創建Spring容器,組件之間直接以依賴注入的方式耦合,甚至無須主動訪問Spring容器本身。

當我們在配置文件中通過方法配置一個Bean時,這樣就需要該Bean實現類中必須有一個無參構造器。故Spring底層相當于調用了如下代碼:

Xxx = new xx.XxClass()如果在配置文件中通過構造注入來創建Bean:
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xmlns="http://www.springframework.org/schema/beans"  
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
   <bean id="bean1" class="com.Bean1">  
       <constructor-arg value="chenssy"/>  
       <constructor-arg value="35-354"/>  
   </bean>  


</beans>

則Spring相當于調用如下代碼:

Bean bean = new com.Test("chenssy","35-354");

四、容器中Bean的作用域

當通過Spring容器創建一個Bean實例時,不僅可以完成Bean實例的實例化,還可以為Bean指定特定的作用域。
Spring支持5種作用域:
1.Singleton:單例模式。在整個SpringIoC容器中,使用singleton定義的Bean將只有一個實例。
2.Prototype:原型模式。每次通過容器的getBean方法獲取prototype定義的Bean時,都將產生一個新的Bean實例。
3.request:對于每次HTTP請求,使用request定義的Bean都將產生一個新的實例,即每次HTTP請求都會產生不同的Bean實例。當然只有在WEB應用中使用Spring時,該作用域才真正有效。
4.session:對于每次HTTPSession,使用session定義的Bean都將產生一個新的實例時,即每次HTTP Session都將產生不同的Bean實例。同HTTP一樣,只有在WEB應用才會有效。
5.global session:每個全局的HTTPSession對應一個Bean實例。僅在portlet Context的時候才有效。

比較常用的singleton和prototype。如果一個Bean實例被設置為singleton,那么每次請求該Bean時都會獲得相同的實例。容器負責跟蹤Bean實例的狀態,負責維護Bean實例的生命周期行為。如果一個Bean實例被設置為prototype,那么每次請求該di的Bean,Spring都會創建一個新的Bean實例返回給程序,在這種情況下,Spring容器僅僅使用new關鍵字創建Bean實例,一旦創建成功,容器將不會再跟蹤實例,也不會維護Bean實例的狀態。如果我們不指定Bean的作用域,則Spring會默認使用singleton作用域。Java在創建Java實例時,需要進行內存申請。銷毀實例時,需要完成垃圾回收。這些工作都會導致系統開銷的增加。因此,prototype作用域Bean的創建、銷毀代價會比較大。而singleton作用域的Bean實例一旦創建成功,可以重復使用。因此,除非必要,否則盡量避免將Bean的作用域設置為prototype。

到此,關于“Spring中Bean的定義和作用域介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女