Как автоматически подключить сервис в ConstraintValidator

Я пишу свое приложение, используя Spring MVC. Я хочу проверить, существует ли электронная почта в базе данных при регистрации пользователя. Я'я написал свое собственное ограничение аннотации с именемUniqueEmail.

Моя Пользовательская сущностьUser.java:

@Entity
@Table(name="users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "email", length = 100, nullable = false, unique = true)
    @NotEmpty
    @Email
    @UniqueEmail(message = "E-mail is not unique")
    private String email;

    @Column(name = "password", nullable = false)
    @NotEmpty
    @Size(min = 5, message = "size must be more 5")
    private String password;
}

Мое ограничение аннотацииUniqueEmail.java:

@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = UniqueEmailValidator.class)
@Documented
public @interface UniqueEmail {
    String message() default "Email is exist";

    Class[] groups() default {};

    Class[] payload() default {};
}

Мой валидаторUniqueEmailValidator.java:

@Component
public class UniqueEmailValidator implements ConstraintValidator {

    @Autowired
    private UserService userService;

    @Override
    public void initialize(UniqueEmail uniqueEmail) {
    }

    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        try {
            return userService.isExistEmail(s);
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }
}

Этот код работает в приложении.

Когда я запускаю свой тестовый код, он возвращает NullPointerException. В моем классе проверкиUserService является нулевым. Я '

мы читалиhttp://docs.spring.io/spring/docs/3.0.0.RC3/reference/html/ch05s07.html но не может никакого решения.

Любая идея?

Обновить

Я использую JUnit.UserClassTest.java

@ContextConfiguration("file:src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml")
public class UserClass {

    private static Validator validator;

    @BeforeClass
    public static void setup() {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        validator = factory.getValidator();
    }

    @Test
    public void emailIsUnique() {

        User user = new User();
        user.setEmail("[email protected]"); // I've written exist email in DB.

        Set constraintViolations = validator.validateProperty(user, "email");

        assertEquals(1, constraintViolations.size());
        assertEquals("E-mail is not unique", constraintViolations.iterator().next().getMessage());
    }
}

Обновить









    
        
            /WEB-INF/tiles.xml
        
    



    





Ответы на вопрос(3)

Ваш ответ на вопрос