我有自定義的驗證春自定義的驗證構造
public class SimpleValidator implements ConstraintValidator<Simple, String> {
private SimpleDao dao;
//@Autowired
public SimpleValidator (SimpleDao<String> dao) {
this.dao = dao;
}
@Override
public void initialize(Simple annotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return dao.someAction(value);
}
}
public class MyService {
//@Autowired
private Validator validator;
public MyService (Validator validator) {
this.validator = validator;
}
public BindingResult SomeMethod(SimpleDto dto) {
BindingResult result = new BeanPropertyBindingResult(dto, "dto");
validator.validate(dto, result);
return result;
}
}
當我使用註釋@Autowired(用於爲MyService類驗證),並嘗試驗證一些DTO,它的成功驗證。但是,當我嘗試使用XML配置
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean class="org.springframework.validation.beanvalidation.BeanValidationPostProcessor">
<property name="validator" ref="validator"/>
</bean>
<bean id="simpleValidator" class="org.jtalks.jcommune.model.validation.validators.SimpleValidator">
<constructor-arg ref="validatorDAO"/>
</bean>
<bean id="myService" class="org.jtalks.jcommune.service.transactional.MyService">
<constructor-arg ref="validator"/>
</bean>
<bean id="validatorDAO"
class="org.jtalks.jcommune.model.dao.hibernate.ValidatorHibernateDao">
<constructor-arg ref="sessionFactory"/>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
...
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.connection.charset">${encoding}</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
我得到異常:
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.jtalks.jcommune.model.validation.validators.SimpleValidator]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.jtalks.jcommune.model.validation.validators.SimpleValidator.<init>()
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:83)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1006)
... 126 more
Caused by: java.lang.NoSuchMethodException: org.jtalks.jcommune.model.validation.validators.SimpleValidator.<init>()
at java.lang.Class.getConstructor0(Class.java:2730)
at java.lang.Class.getDeclaredConstructor(Class.java:2004)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:78)
... 127 more
有沒有能夠使用XML配置驗證?如何在不使用@Autowired註釋的情況下使用SimpleDao實例化驗證器?
'沒有找到默認構造函數「 - 消息已清除。 – Tala
是的,我可以創建默認的構造函數。但我需要用SimpleDao安裝Validator。如果我爲dao創建了默認構造函數和setter,則不會發生異常,但dao將爲空。我認爲spring不會使用xml config來爲驗證器解析依賴關係,但爲什麼? – gios
spring將解析XML文件中的所有依賴項。可以用validatorDao依賴關係更新你的問題。 – Prabhakaran