@Autowired Bean funktioniert mit @Valid auf dem Controller, schlägt jedoch mit dem CRUD-Repository fehl

Ich arbeite an einer Spring MVC + Hibernate + JPA-App mit einem Benutzerregistrierungsformular und habe mich für die Verwendung eines JSR-303-Validators entschieden, um zu überprüfen, ob der Benutzername in der Datenbank bereits vorhanden ist:

public class UniqueUsernameValidator implements ConstraintValidator<VerifyUniqueUsername, String> {

    @Autowired
    UserService userService;

    @Override
    public void initialize(VerifyUniqueUsername constraintAnnotation) {     
    }

    @Override
    public boolean isValid(String username, ConstraintValidatorContext context) {                       

        return  username!=null &&  userService.findByUsername(username) == null;        
    }
}

Es ist sehr einfach und die Validierung hat auf meinem Controller hervorragend funktioniert:

....
    public String signup(@Valid @ModelAttribute("newUser") User user, BindingResult newUserBeanResult)
.....

Das aktuelle Problem, mit dem ich konfrontiert bin, ist das, nachdem ich meine bekommen habeUser Objekt validiert und ich rufe an:

userService.save(user);

Welche implementiertCrudRepository, Ich bekomme einNullPointerException. Aus irgendeinem GrundUserService wird während der Validierung auf dem Controller aber eingespeistnicht wenn ich anrufeCrudRepository.save().

Ich habe ähnliche Beiträge wie diesen gesehen:@Autowired bean null in ConstraintValidator, wenn es von Sessionfactory.getCurrentSession.merge aufgerufen wird und das:Aktivieren des Ruhezustands ohne Verwendung von Autowire aber ich habe mich gefragt, ob schon jemand darauf gestoßen ist. Ich würde denken, dass das Injizieren von Beans für den Zugriff auf die Datenbank auf einem Validator ziemlich häufig ist.

Als Workaround habe ich ein Häkchen für Null hinzugefügtuserService aber es fühlt sich nicht richtig an.

Ist das erwartetes Verhalten? Sollen diese Überprüfungen vor dem Aufruf ausgelöst werden?CrudRepository.save()?Soll ich "manuell" Ruhezustände behandeln? In diesem Fallpre-insert

Antworten auf die Frage(2)

Ihre Antwort auf die Frage