Wie Autowire eine Feder-annotierten service-Klasse in @Configuration-Klasse?

Ich versuche zu injizieren einer service-annotierten Klasse in eine configuration-Klasse, die in einer Spring-Boot-Anwendung, aber es wird nicht injiziert (auf null gesetzt), was ich davon ausgehen ist, aufgrund der Feder lifeycle.

Auch, dieser Dienst hat einen überladenen Konstruktor, der verwendet Konstruktor-Injektion, und ich denke, das ist auch ein problem, wie autowiring wirkt auf einen default-Konstruktor. Allerdings muss der Dienst werden Frühjahr-konfiguriert, so dass ich nicht denke, man kann eine neue Instanz erstellen, in einer Bean annotierten Methode.

Wie kann man dieses Problem lösen?

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private SessionService sessionService;

    @Bean
    public SessionService sessionService() {
        return sessionService;
    }
}

public interface SessionService extends BaseCacheService<Session> {
    void extendExpiration(String key);

    String getSessionId(String key);
}

@Service
public class SessionServiceImpl implements SessionService {

    private Environment environment;
    private UserService userService;

    @Autowired
    public SessionServiceImpl(Environment environment, UserService userService) {
      this.environment = environment;
      this.userService = userService;
    }
}

Wenn ich ausschließen @Bean-Methode, dann bekomme ich einen Kompilierungsfehler:
Wie Autowire eine Feder-annotierten service-Klasse in @Configuration-Klasse?

  • Warum haben Sie eine @Bean Methode für Sie, wenn Sie mit @Service?
  • Entfernen Sie die @Bean Methode. Die @Service ist im Grunde eine @Component welche bekommt, entdeckt mit Kommentar-scanning. Vorausgesetzt, Sie haben das setup. Kurz gesagt, Sie brauchen nicht die @Bean Methode überhaupt. Ihre Annahme ist falsch, auto-Bordnetz hängt nicht von default-Konstruktoren.
  • Können Sie zeigen Sie Ihre SessionService-Schnittstelle? Denn Sie wollen autowire, Schnittstelle, vielleicht gibt es etwas falsch?
  • Warum brauchen Sie SessionService Schnittstelle in SecurityConfiguration? Ich verstehe nicht wirklich der Fall für, die. Ich habe versucht, verschiedene Implementierung von autowire eine Schnittstelle-und alles wo ok.
  • Es ist erforderlich, durch meine http-filter, der ist initialisiert. Die @Configuration annotation zu sein scheint die dieses Problem verursachen
  • Erstellt habe ich ein Beispiel-Projekt, und ich bin in der Lage, autowire die Schnittstelle. Ich habe Ihre ersten Ansatz mit @Bean annotation. Alles andere sollte den Fehler erzeugt

InformationsquelleAutor Razeen | 2016-07-12
Schreibe einen Kommentar