Vererbung Using @Autowired in Abstract Classes

lusitano

Aktives Mitglied
Nabend zusammen.

Laut diesem Guide https://www.baeldung.com/spring-autowired-abstract-class müsste ich die Annotation in der Kindsklassen schreiben wie folgendes beispiel zeigt.

Java:
public abstract class BallService {

    private RuleRepository ruleRepository;

    public BallService(RuleRepository ruleRepository) {
        this.ruleRepository = ruleRepository;
    }
}

@Component
public class BasketballService extends BallService {

    @Autowired
    public BasketballService(RuleRepository ruleRepository) {
        super(ruleRepository);
    }
}

Das funktioniert aber bei mir nicht mehr wenn die Elternklasse mehrere Attribute besitzt.
Statt dessen habe ich es wie folgt realisiert.

Java:
public abstract class Anwender {

    private String vorname;
    private String nachname;

    private AnwenderRechte anwenderRechte;

    public Anwender(String vorname, String nachname, AnwenderRechte anwenderRechte) {
        super();
        this.vorname = vorname;
        this.nachname = nachname;
        this.anwenderRechte = anwenderRechte;
    }
   
@Component
public class Bearbeiter extends Anwender {

    public Bearbeiter(String vorname, String nachname, @Autowired AnwenderRechte anwenderRechte) {
        super(vorname, nachname, anwenderRechte);
        // TODO Auto-generated constructor stub
    }

Es funktioniert so.
Die frage wäre. Kann man das so machen ? Wird es so gemacht oder wie macht man das genau ??

Liebe Grüße und schon mal Danke für eure Antworten.
 

mihe7

Top Contributor
Die Antwort steht doch auf der Seite: "Third, as Spring doesn't support constructor injection in an abstract class, we should generally let the concrete subclasses provide the constructor arguments. This means that we need to rely on constructor injection in concrete subclasses."
 

httpdigest

Top Contributor
Java:
public abstract class Anwender {
@Component
public class Bearbeiter extends Anwender {
    public Bearbeiter(String vorname, String nachname, @Autowired AnwenderRechte anwenderRechte) {
        super(vorname, nachname, anwenderRechte);
    }
    ...
}
Auch macht es keinen Sinn, die @Autowired Annotation an einen Konstruktorparameter zu hängen. Wo sollen denn dann noch die restlichen Parameter "vorname" und "nachname" herkommen, wenn Spring die Instanz der Klasse erzeugt?
Siehe: https://docs.spring.io/spring-frame...ework/beans/factory/annotation/Autowired.html
Autowired Parameters
Although @Autowired can technically be declared on individual method or constructor parameters since Spring Framework 5.0, most parts of the framework ignore such declarations. The only part of the core Spring Framework that actively supports autowired parameters is the JUnit Jupiter support in the spring-test module (see the TestContext framework reference documentation for details).
 

mrBrown

Super-Moderator
Mitarbeiter
Das Autowired sollte auch nicht an den Parameter, sondern an den Konstruktor. Am Parameter wird das in dem Fall ignoriert.


Soll Bearbeiter wirklich eine Componente sein? Das sieht erstmal wie ein ganz normales Objekt aus, was nicht unbedingt als singleton bereit stehen sollte...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
E Methoden abstract static Methode Allgemeine Java-Themen 8
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
S Frage zu abstract Allgemeine Java-Themen 5
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
G Abstract class Stillfrage Allgemeine Java-Themen 4
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5
M abstract Methode aufrufbar? Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
M ist "public abstract class * extends" möglich? Allgemeine Java-Themen 2
T abstract - interface Unterschied Allgemeine Java-Themen 22
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B frage zu "file.renameTo()" bzw. abstract path allg Allgemeine Java-Themen 8
S static mit abstract und in interface Allgemeine Java-Themen 10

Ähnliche Java Themen


Oben