當前位置:首頁 » 存儲配置 » ioc容器中bean如何存儲的

ioc容器中bean如何存儲的

發布時間: 2022-09-19 19:32:22

❶ 在Spring中,Bean有幾種作用域

1、singleton作用域

當一個bean的作用域設置為singleton,那麼Spring IOC容器中只會存在一個共享的bean實例,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。換言之,當把一個bean定義設置為singleton作用域時,Spring IOC容器只會創建該bean定義的唯一實例。這個單一實例會被存儲到單例緩存(singleton cache)中,並且所有針對該bean的後續請求和引用都將返回被緩存的對象實例,這里要注意的是singleton作用域和GOF設計模式中的單例是完全不同的,單例設計模式表示一個ClassLoader中只有一個class存在,而這里的singleton則表示一個容器對應一個bean,也就是說當一個bean被標識為singleton時候,spring的IOC容器中只會存在一個該bean。

配置實例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

或者

<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

2、prototype

prototype作用域部署的bean,每一次請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)都會產生一個新的bean實例,相當於一個new的操作,對於prototype作用域的bean,有一點非常重要,那就是Spring不能對一個 prototype bean的整個生命周期負責,容器在初始化、配置、裝飾或者是裝配完一個prototype實例後,將它交給客戶端,隨後就對該prototype實例不聞不問了。不管何種作用域,容器都會調用所有對象的初始化生命周期回調方法,而對prototype而言,任何配置好的析構生命周期回調方法都將不會被調用。清除prototype作用域的對象並釋放任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責。(讓Spring容器釋放被singleton作用域bean佔用資源的一種可行方式是,通過使用 bean的後置處理器,該處理器持有要被清除的bean的引用。)

配置實例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>

或者

<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>

3、request

request表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效,配置實例:

request、session、global session使用的時候,首先要在初始化web的web.xml中做如下配置:

如果你使用的是Servlet 2.4及以上的web容器,那麼你僅需要在web應用的XML聲明文件web.xml中增加下述ContextListener即可:

<web-app>...<listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>...</web-app>

如果是Servlet2.4以前的web容器,那麼你要使用一個javax.servlet.Filter的實現:

<web-app>..<filter> <filter-name>requestContextFilter</filter-name> <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class></filter> <filter-mapping> <filter-name>requestContextFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>...</web-app>

接著既可以配置bean的作用域了:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>

4、session

session作用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效,配置實例:

配置實例:

和request配置實例的前提一樣,配置好web啟動文件就可以如下配置:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>

5、global session

global session作用域類似於標準的HTTP Session作用域,不過它僅僅在基於portlet的web應用中才有意義。Portlet規范定義了全局Session的概念,它被所有構成某個 portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定於全局portlet Session的生命周期范圍內。如果你在web中使用global session作用域來標識bean,那麼,web會自動當成session類型來使用。

配置實例:

和request配置實例的前提一樣,配置好web啟動文件就可以如下配置:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>

❷ bean生命周期的4個階段是什麼

bean 實例的生命周期如下:

1、為了演示spring的生命周期,首先必須要加入spring的相關包。

2、新建一個SpringBoy類 實現BeanNameAware, BeanFactoryAware, InitializingBean, DisposableBean

要注意加入相關的包。新建一個processor類,用於處理bean,叫作bean處理器,在xml中作如下配置:<bean class="zpx.life.Processor"/>

3、分別實現它們的方法。並在方法中加入必須的信息,以便後面理解與觀察。

4、在配置文件中配置springboy。指定初使化方法與銷毀方法。

好處:

Spring是全面的和模塊化的。Spring有分層的體系結構,這意味著你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。例如,可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務對象。

它的設計從底部幫助你編寫易於測試的代碼。Spring是用於測試驅動工程的理想的framework。

Spring對工程來說,它不需要一個以上的framework。Spring是潛在地一站式解決方案,定位於與典型應用相關的大部分基礎結構。它也涉及到其他framework沒有考慮到的內容。

以上內容參考:網路-spring

❸ bean的作用域和生命周期的區別

五種作用域中,request、session和global
session三種作用域僅在基於web的應用中使用(不必關心你所採用的是什麼web應用框架),只能用在基於web的Spring
ApplicationContext環境。
(1)當一個bean的作用域為Singleton,那麼Spring
IoC容器中只會存在一個共享的bean實例,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。Singleton是單例類型,就是在創建起容器時就同時自動創建了一個bean的對象,不管你是否使用,他都存在了,每次獲取到的對象都是同一個對象。注意,Singleton作用域是Spring中的預設作用域。要在XML中將bean定義

❹ bean的生命周期是多久

Bean的生命周期指的是從一個普通的Java類變成Bean的過程,對prototype bean來說,當用戶getBean獲得prototype bean的實例後,IOC容器就不再對當前實例進行管理,而是把管理權交由用戶,此後再getBean生成的是新的實例。

常用介面說明:

1、BeanNameAware該介面只有一個方法setBeanName(String name),用來獲取bean的 id或者name。

2、BeanFactoryAware該介面只有一個方法setBeanFactory(BeanFactory beanFactory),用來獲取 當前環境中的BeanFactory。

3、ApplicationContextAware該介面只有一個方法setApplicationContext(ApplicationContext applicationContext),用來獲取,當前環境中的ApplicationContext獲取到IOC容器之後,可以對beans進行修改等操作。

❺ spring中bean的生命周期是怎麼樣的

1.Spring對Bean進行實例化(相當於程序中的new Xx())。

2.Spring將值和Bean的引用注入進Bean對應的屬性中

3.如果Bean實現了BeanNameAware介面,Spring將Bean的ID傳遞給setBeanName()方法。

(實現BeanNameAware清主要是為了通過Bean的引用來獲得Bean的ID,一般業務中是很少有用到Bean的ID的)。

4.如果Bean實現了BeanFactoryAware介面,Spring將調用setBeanDactory(BeanFactory bf)方法並把BeanFactory容器實例作為參數傳入。

(實現BeanFactoryAware 主要目的是為了獲取Spring容器,如Bean通過Spring容器發布事件等)。

❻ IOC容器是什麼

IOC容器:Ioc—Inversion of Control,即「控制反轉」,就是具有依賴注入功能的容器,是可以創建對象的容器,IOC容器負責實例化、定位、配置應用程序中的對象及建立這些對象間的依賴。

IoC 的全稱叫做 Inversion of Control,可翻譯為為「控制反轉」或「依賴倒置」,它主要包含了三個准則:

1、高層次的模塊不應該依賴於低層次的模塊,它們都應該依賴於抽象;

2、抽象不應該依賴於具體實現,具體實現應該依賴於抽象;

3、面向介面編程 而不要面向實現編程。

(6)ioc容器中bean如何存儲的擴展閱讀

Spring 提供了許多 IOC 容器
的實現。比如 XmlBeanFactory, 等。其中 XmlBeanFactory 就 是針對最基本的IOC 容器的實現,這個 IOC 容器可以讀取XML 文件定義的 BeanDefinition(XML 文件中對 bean 的描述)。

ApplicationContext 是 Spring 提供的一個高級的 IOC 容器,它除了能夠提供 IOC 容器的基本功
能外,還為用戶提供了以下的附加服務。

❼ spring配置文件中能夠用到的bean的作用域都有哪些

singleton作用域:當把一個bean定義設置為singleton作用域是,spring
ioc容器中只會存在一個共享的bean實例,並且所有對bean的
請求,只要id與該bean定義相匹配,則只會返回該bean的同一實例。值得強調的是singleton作用域是spring中的預設作用域。
prototype作用域:prototype作用域的bean會導致在每次對該bean請求(將其注入到另一個bean中,或者以程序的方式調用容器的getbean
()方法)時都會創建一個新的bean實例。根據經驗,對有狀態的bean應使用prototype作用域,而對無狀態的bean則應該使用singleton作用
域。
對於具有prototype作用域的bean,有一點很重要,即spring不能對該bean的整個生命周期負責。具有prototype作用域的bean創建後交由調
用者負責銷毀對象回收資源。
簡單的說:
singleton
只有一個實例,也即是單例模式。
prototype訪問一次創建一個實例,相當於new。
應用場合:
1.需要回收重要資源(資料庫連接等)的事宜配置為singleton,如果配置為prototype需要應用確保資源正常回收。
2.有狀態的bean配置成singleton會引發未知問題,可以考慮配置為prototype。

❽ spring中bean的生命周期是怎麼樣的

spring中bean完整的生命周期:
1,實例化(當我們載入beans.xml文件)實例化到內存。證明:它會調用bean裡面的無參構造。
2,設置屬性值(調用set方法設置屬性)。
3,如果實現了BeanNameAware則調用BeanNameAware介面的setbeanFatroy()方法,獲取Bean的id
4,如果實現了BaneFactoryAware則可以獲取BeanFactory。,
5,如果實現了ApplicationAware則可以獲取ApplicationAware。
6,如果bean和一個後置處理器關聯(實現BeanPostProcessor介面),則會自動去調用
7,如果實現了InitializingBean則會調用afterPropertiesSet方法。
8,如果在配置了<bean init-method="init" />就可以在bean中定義自己的初始化方法。
9,如果bean和一個後置處理器關聯(實現BeanPostProcessor介面),則會自動去調用
10,使用我們的bean。
11,容器關閉。
12,可以通過實現DisposableBean介面來調用destroy()的銷毀方法。
13,可以在配置中,<bean destroy-method="destroy">,在bean中寫銷毀方法。

❾ java spring框架中,bean的生命周期是怎麼樣的請形象的描述一下!

Spring框架中,一旦把一個bean納入到Spring IoC容器之中,這個bean的生命周期就會交由容器進行管理,一般擔當管理者角色的是BeanFactory或ApplicationContext。認識一下Bean的生命周期活動,對更好的利用它有很大的幫助。

下面以BeanFactory為例,說明一個Bean的生命周期活動:

Bean的建立

由BeanFactory讀取Bean定義文件,並生成各個實例。

Setter注入

執行Bean的屬性依賴注入。

BeanNameAware的setBeanName()

如果Bean類實現了org.springframework.beans.factory.BeanNameAware介面,則執行其setBeanName()方法。

BeanFactoryAware的setBeanFactory()

如果Bean類實現了org.springframework.beans.factory.BeanFactoryAware介面,則執行其setBeanFactory()方法。

BeanPostProcessors的processBeforeInitialization()

容器中如果有實現org.springframework.beans.factory.BeanPostProcessors介面的實例,則任何Bean在初始化之前都會執行這個實例的processBeforeInitialization()方法。

InitializingBean的afterPropertiesSet()

如果Bean類實現了org.springframework.beans.factory.InitializingBean介面,則執行其afterPropertiesSet()方法。

Bean定義文件中定義init-method

在Bean定義文件中使用「init-method」屬性設定方法名稱,如下:


<bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod">
.......
</bean>


這時會執行initMethod()方法,注意,這個方法是不帶參數的。

BeanPostProcessors的processAfterInitialization()

容器中如果有實現org.springframework.beans.factory.BeanPostProcessors介面的實例,則任何Bean在初始化之前都會執行這個實例的processAfterInitialization()方法。

DisposableBean的destroy()

在容器關閉時,如果Bean類實現了org.springframework.beans.factory.DisposableBean介面,則執行它的destroy()方法。

Bean定義文件中定義destroy-method

在容器關閉時,可以在Bean定義文件中使用「destory-method」定義的方法


<bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod">
.......
</bean>


這時會執行destroyMethod()方法,注意,這個方法是不帶參數的。

以上就是BeanFactory維護的一個Bean的生命周期。下面這個圖可能更直觀一些:



如果使用ApplicationContext來維護一個Bean的生命周期,則基本上與上邊的流程相同,只不過在執行BeanNameAware的setBeanName()後,若有Bean類實現了org.springframework.context.ApplicationContextAware介面,則執行其setApplicationContext()方法,然後再進行BeanPostProcessors的processBeforeInitialization()

實際上,ApplicationContext除了向BeanFactory那樣維護容器外,還提供了更加豐富的框架功能,如Bean的消息,事件處理機制等。

❿ spring中什麼是bean

bean的定義:

Spring 官方文檔對 bean 的解釋是:
In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.

翻譯過來就是:
在 Spring 中,構成應用程序主幹並由Spring IoC容器管理的對象稱為bean。bean是一個由Spring IoC容器實例化、組裝和管理的對象。

我們總結如下:
1.bean是對象,一個或者多個不限定
2.bean由Spring中一個叫IoC的東西管理
3.我們的應用程序由一個個bean構成

熱點內容
前端android 發布:2025-03-20 06:50:42 瀏覽:93
進制轉換棧c語言 發布:2025-03-20 06:50:31 瀏覽:339
myeclipse不自動編譯了 發布:2025-03-20 06:41:38 瀏覽:777
led汽車大燈和鹵素燈該選哪個配置 發布:2025-03-20 06:40:55 瀏覽:917
sql網校 發布:2025-03-20 06:16:42 瀏覽:279
安卓手機圖標排列為什麼會混亂 發布:2025-03-20 06:16:05 瀏覽:761
手機pin初始密碼是多少 發布:2025-03-20 06:15:59 瀏覽:900
javaif常量變數 發布:2025-03-20 06:15:57 瀏覽:344
iis安裝sql 發布:2025-03-20 06:05:31 瀏覽:149
製作自解壓安裝 發布:2025-03-20 05:41:49 瀏覽:305