如何使用Spring的FactoryBean介面

2021-09-11 14:04:57 字數 2924 閱讀 8002

在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...