我試圖創建Hibernate Validator bean,並遇到了這個問題,在另一個類中從靜態工廠方法創建一個bean。我發現Spring方法讓我的Validator bean初始化(解決方案在底部),但問題本身仍未解決。此處使用驗證器作爲示例。從另一個類的靜態方法初始化Spring bean?
這是我如何使用Java創建的校驗器實例
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
這是我試過的applicationContext.xml來創建bean
<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-method="javax.validation.Validation.buildDefaultValidatorFactory" />
<bean id="validator"
class="javax.validation.Validator"
factory-bean="validatorFactory"
factory-method="getValidator" />
我的理解是,在「出廠方法「,您只能訪問在」class「參數中定義的Class中定義的靜態方法。由於該方法buildDefaultValidatorFactory()是靜態的,我不能創建驗證的一個實例,並把它作爲「工廠豆」爲validatorFactory這樣的:
<bean id="validation" class="javax.validation.Validation" />
<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-bean="validation"
factory-method="buildDefaultValidatorFactory" />
這結束了對錯誤信息
「檢查具有指定名稱的方法依然存在,它是非靜態「
問題是你怎麼會在這種春季的情況下創建豆?
這是我如何解決了這個問題,驗證:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
類名是爲了證明我想要做的事情。正如我所說的「我所瞭解的是,在」工廠方法「中,只能訪問在」類「參數中定義的類中定義的靜態方法。」 – Spaideri 2012-03-27 07:56:24
這是正確的 - 如果您給出'class'參數,那麼工廠方法必須是該類的靜態方法,如創建'validatorFactory'所示。 – 2012-03-27 13:10:42