在spring容器中有兩類的bean,一類是普通的bean,一類是工廠bean。這兩種bean都是被spring的容器進行管理的。而spring也提供了乙個介面用於擴充套件工廠bean,我們只要實現org.springframework.beans.factory.factorybean
即可。
首先我們看一下factorybean
介面
public inte***ce factorybean
複製**
這三個方法的作用分別是
現在讓我們開始使用,建立乙個use***ctory
用來建立例項user
public class user
複製**
use***ctory
工廠類
public class use***ctory implements factorybean
@override
public class<?> getobjecttype
() @override
public boolean issingleton
() }
複製**
新增配置類將use***ctory
加入到容器中
@configuration
@bean
public use***ctory use***ctory()}
複製**
接下來我們就能通過use***ctory
工廠類進行建立user
了
public class beanfactorytest extends basetest
}複製**
此時我們debug也能看到其我們自動注入的user
類就是通過use***ctory
建立的例項
有時候我們需要在工廠bean建立之後,但是getobject
方法執行之前執行一些動作,例如資源配置檢查之類的動作的話,我們可以使用@postconstruct
註解在方法上,那麼此方法就會在執行getobject()
方法執行之前先執行。
此時我們在use***ctory
工廠類中修改如下,增加@postconstruct
註解的方法,並且增加列印日誌。
public class use***ctory implements factorybean
@override
public class<?> getobjecttype
() @override
public boolean issingleton
() @postconstruct
public void initialize()}
複製**
此時我們執行就會發現執行順序
spring為我們提供了乙個關於factorybean
的抽象類abstractfactorybean
為我們簡化了操作。我們直接繼承此類就能更加方便的建立單例或者非單例的實體類了。接下來我們就演示一下如何建立單例和非單例的類。首先先建立兩個工廠,乙個工廠singleuse***ctory
負責建立單例,乙個工廠nonsingleuse***ctory
負責建立非單例
public class singleuse***ctory extends abstractfactorybean
@override
protected user createinstance() throws exception
--get set方法
}複製**
nonsingleuse***ctory
類
public class nonsingleuse***ctory extends abstractfactorybean
@override
public class<?> getobjecttype
() @override
protected user createinstance() throws exception
---- get set方法
}複製**
並且在配置檔案中加入對這兩個工廠類的配置
@bean(name = "singleuser")
public singleuse***ctory getsingle
() @bean(name = "nonsingleuser")
public nonsingleuse***ctory getnonsingle
()複製**
在測試類中測試如下
public class singlebeanfactorytest extends basetest
}複製**
我們檢視類的路徑就可以知道哪些類是一樣的了
從結果中我們可以看到singleuse***ctory
工廠類建立的都是單例的物件,而nonsingleuse***ctory
建立的都是非單例的物件。如果是建立單例的那麼就無需設定singleton
的值,因為他是預設為true
的。
使用factorybean
能夠在spring中更好更便捷的建立管理一些有著複雜構造邏輯的實體類。
1 如何使用Spring的呢
1.運用spring來替代工廠類 2.實現控制反轉 依賴注入 1.宣告的物件的同時,需要提供物件的set方法 2.例項化物件並不是由建立物件的類本身來負責 3.而是由呼叫該物件的類來負責例項化該物件 manager實現類 public class geneircmanagerimp implemen...
Fact表的星型結構
傳統星型模型是將主資料與維度表放在一起,同一主資料在不同的交易資料維度表中儲存多次,達不到復用,不靈活,主資料發生變化後,修改非常不便 bw裡的星型模型採用的是擴充套件星型模型 維度表裡儲存的不是主資料本身,而是主資料的sid,達到了不同交易資料共享同一主資料目的,主資料變化引起的修改也不會太大。下...
Spring中如何使用Quartz
首先第一步肯定是在pom檔案中匯入相關的包。pom.xml org.apache.logging.log4j log4j core 2.2 org.quartz scheduler quartz 2.2.1 在spring中使用quartz有兩種方式實現 第一種是任務類繼承quartzjobbean...