2013-05-29 54 views
0

我想使用Hibernate Validator 4作爲獨立包(即沒有0​​Spring/Hibernate)。這是我發現的代碼是以下(爲myBean一些 豆與Hibernate驗證4個註解,爲myBean是它的實例),並 它確實返回違反約束:Hibernate驗證器4獨立:類約束緩存

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    Set<ConstraintViolation<MyBean>> result = validator.validate(myBean); 

但是,我意識到,驗證實例似乎不是每班; 如果有人知道:Validator緩存處理myBean得到的約束(這樣當我再次爲同一個類調用時,例如validator.validate(myBean2), 它不會再次搜索註釋等)?如果是這樣,也許一個人也知道這些約束得到緩存的地方?

+0

無法回答我自己的問題,所以這裏以評論的形式回答:是的,ValidatorImpl緩存字段beanMetaDataCache中的類的元數據。 –

回答

0

正如你所說的Hibernate Validator緩存元數據。這裏是負責的類 - https://github.com/hibernate/hibernate-validator/blob/master/engine/src/main/java/org/hibernate/validator/internal/metadata/BeanMetaDataManager.java

請注意,沒有API與緩存進行交互。內存需求後,高速緩存被清除。

+0

謝謝,我的問題是關於Hibernate Validator 4的;在我看來,至少在4.2版本中沒有BeanMetaDataManager –

+0

有,它在那裏被稱爲BeanMetaDataCache。儘管如此。底線,所有Hibernate Validator 4和5版本都以這種或那種方式緩存bean元數據。 – Hardy

+0

@Hardy我在看5.2.2,我找不到'BeanMetaDataCache'。 – Darshana