Как автоматически подключить сервис в 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