Es gibt n+1 Artikel, warum das architektonisch keinen Sinn ergeben würde – aber wenn man das trotzdem möchte, findet sich hier die Lösung (leicht abgewandelt, zB ist der Setter privat), die keine Konstruktor-Parameter erfordert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// @Component "aktiviert" die Dependency Injection: @Component public class User { // *keine* Annotations private static UserRepository repository; // kann (sollte?! Ist nur für Zugriff durch Spring!) private sein: @Autowired private void setUserRepository(UserRepository repository) { User.repository = repository; } // ... |
PS: Der Setter wird nur beim Startup aufgerufen, und nicht mit jedem Bean, insofern entsteht dadurch kein Performance-Issue.
PPS, Achtung: Dieser Kommentar hat recht, deshalb Vorsicht! Ggf. sollte das Feld transient sein
ungetestete Alternative
via:
1 2 3 4 5 |
private final static Foo foo = AppContext.getApplicationContext().getBean(Foo.class); public static void randomMethod() { foo.doStuff(); } |