2015-07-10 311 views
4

我有一些UserService对User实体进行操作。 我创建了我自己的注释和ConstraintValidator类作为实现如何将(@Autowired)@Service注入ConstraintValidator?

我需要将该UserService注入ConstraintValidator。而且,随着春天的文档说,登记后豆:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

SpringConstraingValidatorFactory默认情况下注册,所以我可以很容易地@Autowired我的服务进去。 (来源:http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/validation.html#validation-beanvalidation-spring-constraints

不幸的是,它不适合我。我收到与NullPointerException异常堆栈跟踪的领域(内实现ConstraintValidator类):

@Autowired 
private UserService userService; //here 

,并在调用服务

@Override 
public boolean isValid(String username, ConstraintValidatorContext constraintValidatorContext) { 
    personService.doSomethingWithService(); //here 
    return true; 
} 

因此,这意味着,该UserService不能正常喷射。我也曾尝试使用了ApplicationContextAware - 实现它在我的ConstraintValidator类,获取上下文并找到豆:

(UserService) context.getBean("userService"); 

但它也没有帮助。我不知道这有什么错我的代码。最后,stacktrace包含很多例外,包括NullPointer和RollbackException。

java.lang.NullPointerException 
    com.reportme.model.validation.UsernameAvailableValidator.isValid(UsernameAvailableValidator.java:20) 
    com.reportme.model.validation.UsernameAvailableValidator.isValid(UsernameAvailableValidator.java:9) 
    org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:308) 
    org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180) 
    org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:124) 
    org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85) 
    org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:463) 
//... 

org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction 
    org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526) 
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757) 
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726) 
//... 

javax.persistence.RollbackException: Error while committing the transaction 
    org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94) 
    org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517) 

我使用Spring 4如果有必要,将非常感激的帮助,谢谢!

回答

-1

我的环境是spring-boot,下面的代码与org.springframework.stereotype.Component注释我的验证类正在工作,FYR。

@Component 
public class FooValidator implements ConstraintValidator<Foo, Object> { 

    @Autowired 
    MyService service; 

    @Override 
    public void initialize(Foo constraintAnnotation) { 
    } 

    @Override 
    public boolean isValid(Object value, ConstraintValidatorContext context) { 
    return service.isValid(value); 
    } 
} 
+0

我正在使用弹簧引导1.4.1。而且,我使用相同的代码,但服务仍然为空。 – BeeNoisy

相关问题