-1

カスタムバリデーターがあります

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 でバリデーターをインスタンス化するにはどうすればよいですか?

4

1 に答える 1