Was ist der richtige Weg, eine injizierte Bean in einer statischen Methode zu verwenden?

8

Diese Frage mag etwas seltsam erscheinen. Angenommen, ich habe einen Dienst, den ich in einer Utility-Klasse mit statischen Methoden verwenden möchte. Der Service ist eine Spring-Bean, also werde ich zum Beispiel einen Setter benutzen und (@Autowired), um ihn in meine Utility-Klasse zu injizieren. Wie in der Dokumentation von Spring erwähnt, sind alle Beans im Bean-Kontext statisch. Wenn Sie also eine Bean in eine Klasse injizieren möchten, müssen Sie den Modifikator "static" nicht verwenden. Siehe unten:

%Vor%

Gehen wir nun zurück zu dem, was ich zuerst erwähnt habe (Benutzung des Dienstes in einer statischen Methode):

%Vor%

Obwohl der Dienst statisch ist, muss ich seine Definition statisch hinterfragen. Das ist für mich etwas kontraintuitiv. ist das falsch? oder ist es ein besserer Weg? Danke

    
Hossein 27.10.2013, 14:24
quelle

2 Antworten

13

Sie können das statische Feld nicht automatisch ansteuern.

Aber Sie können eine kleine Abhilfe schaffen:

%Vor%

Beachten Sie, dass Sie diese Klasse als "Komponente" deklarieren müssen, um tmpService

zu injizieren     
yname 27.10.2013, 18:55
quelle
3

Sie haben keine Wahl. Wenn Sie ein static -Feld einer Klasse initialisieren möchten, müssen Sie Spring eine Instanz dieser Klasse erstellen lassen und den Wert injizieren.

Ein kleiner Ratschlag. Es gibt wirklich keinen Grund für Sie, static Methoden in diesem Fall zu verwenden. Wenn Sie ein Singleton-Dienstprogramm verwenden möchten, geben Sie Ihrer Bean einfach singleton scope.

    
Sotirios Delimanolis 27.10.2013 14:30
quelle