spring - इंजेक्शन कैसे करें(@ एटोवर्ड) @ सर्विस सर्विस कंटेनेंट में?



nullpointerexception transactions (1)

मुझे कुछ उपयोगकर्ता सेवा है जो उपयोगकर्ता इकाई पर परिचालन करता है। मैंने अपना एक एनोटेशन और ConstraintValidator वर्ग को कार्यान्वयन के रूप में बनाया है

मुझे UserNervice को ConstraintValidator में इंजेक्ट करने की आवश्यकता है। और, जैसा स्प्रिंग डॉक्स कहते हैं, बीन दर्ज करने के बाद:

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

SpringConstraingValidatorFactory डिफ़ॉल्ट रूप से पंजीकृत है, इसलिए मैं इसे आसानी से @ मेरी सेवा को निकाल सकता हूँ (स्रोत: http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/validation.html#validation-beanvalidation-spring-constraints )

दुर्भाग्य से यह मेरे द्वारा काम नहीं करता है मैं क्षेत्र पर NullPointerException के साथ stacktrace प्राप्त करता है (अंदर वर्ग जो 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");

लेकिन यह भी मदद नहीं किया .. मुझे नहीं पता है कि मेरे कोड में क्या गलत है और अंत में, स्टैकट्र्रेस, जिसमें कई अपवाद हैं, जिसमें नल पॉइंटर और रोलबैक एक्सपैशन शामिल है।

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)

मैं स्प्रिंग 4 का उपयोग कर रहा हूँ अगर इसकी जरूरी है और बहुत मदद के लिए आभारी होंगे, धन्यवाद!


मेरा माहौल वसंत-बूट है, और org.springframework.stereotype.Component के साथ कोड के नीचे। मेरे सत्यापन वर्ग के लिए 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);
  }
}




constraints