天天看點

《Spring攻略(第2版)》——1.10 用@Required注解檢查屬性

本節書摘來自異步社群《spring攻略(第2版)》一書中的第1章,第1.10節,作者: 【美】gary mak , josh long , daniel rubio著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

1.10.1 問題

spring的依賴檢查功能僅能檢查某些類型的所有屬性。它的靈活性不夠,不能僅檢查特定的屬性。在大部分情況下,你希望檢查特定的屬性是否設定,而不是特定類型的所有屬性。

1.10.2 解決方案

requiredannotationbeanpostprocessor是一個spring bean後處理器,檢查帶有@required注解的所有bean屬性是否設定。bean後處理器是一類特殊的spring bean,能夠在每個bean初始化之前執行附加的工作。為了啟用這個bean後處理器進行屬性檢查,必須在spring ioc容器中注冊它。注意,這個處理器隻能檢查屬性是否已經設定,而不能測試屬性是否非空。

1.10.3 工作原理

假定對于序列生成器來說,prefixgenerator和suffix屬性都是必要的。你可以用@required注解它們的設值方法。

為了要求spring檢查所有序列生成器執行個體上這些屬性是否已經設定,你必須在ioc容器中注冊一個requiredannotationbeanpostprocessor執行個體。如果你打算使用bean工廠,就必須通過api注冊這個bean後處理器,否則,隻能在應用上下文中聲明這個bean後處理器的執行個體。

如果你正在使用spring 2.5或者更高版本,可以簡單地在bean配置檔案中包含元素,這将自動地注冊一個requiredannotationbeanpostprocessor執行個體。

如果任何帶有@required的屬性未設定,bean後處理器将抛出一個beaninitializationexception異常。

除了@required注解之外,requiredannotationbeanpostprocessor還能用自定義的注解檢查屬性。例如,你可以建立如下注解類型:

然後将這個注解應用到必要屬性的設值方法。

為了用這個注解類型檢查屬性,你必須在requiredannotationbeanpostprocessor的required annotationtype屬性中指定。