1. 程式人生 > >Spring中depends-on的作用是什麼?

Spring中depends-on的作用是什麼?

http://yanln.iteye.com/blog/2210723

spring的IOC容器負責bean的管理,當例項化一個bean是,spring保證該Bean所依賴的其他bean已經初始化。一般情況下,用<ref>元素建立對其他bean的依賴關係。

比如:

Xml程式碼  收藏程式碼
  1. <bean id="a"   class="com.yanln.spring.bean.A">   </bean>  
  2. <bean id="b" class="com.yanln.spring.bean.B" p:a-ref="a"> </bean>  

 但在某些情況下,這種bean之間的依賴關係並不那麼明顯。

舉個例子:某個論壇系統擁有很多系統引數(如會話過期時間、快取更新時間等),這些系統引數用於控制系統的執行邏輯。比如:

Java程式碼  收藏程式碼
  1. public class SystemSettings{  
  2.            //快取更新時間  
  3.            public static int REFRESH_CYCLE = 60;  
  4.            ......  
  5. }  

SystemSettings中為每一個系統引數提供了預設值,但對於一個靈活的論壇是需要提供一個管理後臺的,在管理後臺中可以調整這些系統引數並儲存到後臺資料庫中,而在系統啟動時,初始化程式從資料庫後臺載入這些系統引數的值來覆蓋系統預設值。比如:

Java程式碼  收藏程式碼
  1. public class SystemInit{  
  2.           public SystemInit(){  
  3.                      //模擬從資料庫中載入的系統引數配置值  
  4.                      SystemSettings.REFRESH_CYCLE=100;  
  5.                      ......  
  6.           }  
  7. }  

假設論壇系統有一個快取重新整理管理器,它需要根據系統引數SystemSettings.REFRESH_CYCLE建立快取重新整理定時任務:

Java程式碼  收藏程式碼
  1. public class CacheManager{  
  2.           public CacheManager(){  
  3.                     Timer t = new Timer();  
  4.                     TimerTask cacheTask = new CacheTask();                      
  5.                      //快取重新整理定時處理  
  6.                     t.schedule(cacheTask,0,SystemSettings.REFRESH_CYCLE);  
  7.           }  
  8.           ......  
  9. }  

在以上的例項中,CacheManager類需要用到SystemSetting類的值,而SystemSettings的值有SystemInit負責初始化,雖然CacheManager不直接依賴SystemInit,但從邏輯上看,CacheManager希望在SystemInit載入並完成系統引數設定後再啟動,以獲得最新的系統引數值。如果這三個bean都在spring配置檔案中定義,我們如何保證SystemInit在CacheManager之前進行初始化呢?

spring允許使用者通過depends-on屬性指定bean前置依賴的bean,前置依賴的bean會在本bean例項化之前建立好:

Xml程式碼  收藏程式碼
  1. <bean id="sysinit" class="SystemInit">  
  2. <bean id="manager" class="CacheManager"  depends-on="sysinit"/>  

相關推薦

Springdepends-on作用是什麼?

http://yanln.iteye.com/blog/2210723 spring的IOC容器負責bean的管理,當例項化一個bean是,spring保證該Bean所依賴的其他bean已經初始化。一般情況下,用<ref>元素建立對其他bean的依賴關係。

springdepends-on與look-up的作用

depends-on的作用depends-on的作用一般是一個bean依賴於另外一個bean,被依賴的bean一般用於一些初始化和收尾的工作  如在這個例子中,DependentBean依賴於ResourceBean,  ResourceBean主要用於指定檔案路徑、開啟檔案

Springbean的作用範圍

pre 方法 context () 釋放資源 應用 生命 產生 ron singleton作用域:   Spring的scope的默認值是singleton   Spring 只會為每一個bean創建一個實例,並保持bean的引用. <bean id="bean的i

SpringApplicationContextAware 的作用

ApplicationContextAware 通過它Spring容器會自動把上下文環境物件呼叫ApplicationContextAware介面中的setApplicationContext方法。 我們在ApplicationContextAware的實現類中,就可以通過這個上下文環

Spring 元素的作用

一、介紹 spring的配置檔案中常包含如下元素:<context:annotation-config/>此元素的作用是向spring容器中註冊: 註冊這四個BeanPostProcessor的作用是使相應的註解起作用 1.AutowiredAnnotatio

SpringBean的作用域有哪些

在Spring的早期版本中,僅有兩個作用域:singleton和prototype,前者表示Bean以單例的方式存在;後者表示每次從容器中呼叫Bean時,都會返回一個新的例項,prototype通常翻譯為原型。 補充:設計模式中的建立型模式中也有一個原型模式,原型模式也是一個常用的模式,例如做一個

Spring@Component的作用

今天在寫程式的時候看見一個以前沒有見過的註解(@Component),在網上查詢過後,經過實踐,決定把它記錄下來。 1、@controller 控制器(注入服務) 用於標註控制層,相當於struts中的action層 2、@service 服務(注入d

跨域問題:CrossOrigin Spring@CrossOrigin的作用

在Controller中看到@CrossOrigin ,這是什麼?有什麼用?為什麼要用? what? @CrossOrigin是用來處理跨域請求的註解 先來說一下什麼是跨域: 當域名www.abc.com下的js程式碼去訪問www.def.com域名下的資源,就

Springdepends-on屬性Bean依賴

Spring核心研究-管理bean之間的關係一(depends-on) depend-on用來表示一個Bean的例項化依靠另一個Bean先例項化。如果在一個bean A上定義了depend-on B那麼就表示:A 例項化前先例項化 B。這種情況下,A可能根本不需要持有一個

springContextLoaderListener的作用

ContextLoaderListener的作用是啟動Web容器時,自動裝配ApplicationContext的配置資訊。因為它實現了ServletContextListener這個介面,在web.xml配置這個監聽器,啟動容器時,就會預設執行它實現的方

springbean的作用域屬性single與prototype的區別

1。 當一個bean的作用域設定為singleton, 那麼Spring IOC容器中只會存在一個共享的bean例項,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一例項。換言之,當把一個bean定義設定為singleton作用域時,Sp

spring的Log4jConfigListener作用和webapp.root的設定

轉:http://blog.sina.com.cn/s/blog_7bbf356c01016wld.html 使用spring中的Log4jConfigListener有如如下好處:  1. 動態的改變記錄級別和策略,不需要重啟Web應用,如《Effective Ente

Spring@CrossOrigin的作用

在Controller中看到@CrossOrigin ,這是什麼?有什麼用?為什麼要用? what? @CrossOrigin是用來處理跨域請求的註解 先來說一下什麼是跨域: 當域名www.abc.com下的js程式碼去訪問www.def.co

spring bean的作用域和生命週期

spring中bean的作用域: 生命週期(官方圖): spring 中bean例項化過程(不好意思,我盜圖了): 1:instantiate bean物件例項化 2:populate properties 封裝屬性 3:如果Bean實現BeanNameAwar

SpringBean的作用域、生命周期

作用域 spring容器 分享 引用 多少 返回 portlet type 精確 Bean的作用域(scope)   Spring 3定義了五種作用域,分別為singleton(單例)、prototype(原型)、request、session、global sessio

Spring的ref和depends-on區別

參考:http://yanln.iteye.com/blog/2210723 這兩者都是表示對其他bean的依賴,但是ref常用的情況是這個bean作為當前bean的屬性,比如: <bean id="a" class="ClassA"/> &

SpringBean的五個作用

就會 clas web應用 import 銷毀 cstring tor 默認 global 當通過spring容器創建一個Bean實例時,不僅可以完成Bean實例的實例化,還可以為Bean指定特定的作用域。Spring支持如下5種作用域: singleton:單例模式,

spring 之 lazy-init Autowired depends-on

bean 意思 ebe java 源碼分析 roo 啟動 register ont 1 lazy-init lazy-init是延遲初始化的意思。 spring中容器都是盡早的創建和配置所有的單例bean,因此當容器在啟動時,就會去配置和創建單例bean。 默認情況

SpringBean的理解以及@Bean的作用

是把 ring con 通過 自動配置 面向對象 ava 符號 反射 一、Bean是啥 1、Java面向對象,對象有方法和屬性,那麽就需要對象實例來調用方法和屬性(即實例化); 2、凡是有方法或屬性的類都需要實例化,這樣才能具象化去使用這些方法和屬性; 3、規律:凡是子類及

Spring-depends-on

trigger pre enc XML ger amp anon nat bean 如果沒有一個Bean依賴另一個Bean的static代碼塊進行初始化的話,我們可以使用depend-on實現,官方文檔如下: For most situations, the fact