2017-09-01 1 views
0

Ist es in Spring Boot möglich, Objekt zu autowire, das von @ManagedResource markiert ist. Ich versuche das zu tun, aber das Objekt ist null.Spring Boot Autowire @ManagedResource

Zum Beispiel:

@Component 
@ManagedResource(objectName = MyMBean.MBEAN_NAME) 
public class MyMBeanImpl implements MyMBean { 
    private String attribute; 

    @Override 
    @ManagedAttribute(description="some attribute") 
    public void setAttribute(String attribute) { 
     this.attribute = attribute; 
    } 
} 

Frühling schafft entsprechende MBean. Aber wenn ich versuche, dieses Ziel zu autowire sein Attribut zu verwenden, erhalte ich null:

@Component 
public final class Consumer { 
    @Autowired 
    MyMBean mBean; // is null 
    ... 
} 
+0

** Behoben **. Das Problem war überhaupt nicht in '@ ManagedResource'. Problem war in _field injection_. _Constructor injection_ hat mein Problem gelöst. Weitere Informationen finden Sie unter [https://stackoverflow.com/questions/39890849/what-exactly-is-field- injection-and-how-to-avoid-it](https://stackoverflow.com/questions/39890849/ Was-genau-ist-Feld-Injektion-und-wie-vermeiden-es) – piphonom

+0

Dieser Artikel kann einige Punkte klären: [http://www.baeldung.com/running-setup-logic-on-startup-in -Spring] (http://www.baeldung.com/running-setup-logic-on-startup-in-spring) – piphonom

Antwort

1

Die @Autowired Objekte erhalten kann nicht initialisiert, wenn Ihre Konfiguration ist nicht richtig definiert. Spring scannt nach verwalteten Komponenten in angegebenen Paketen. Ich nehme an, dass Sie @ComponentScan Annotation auf Ihrer Springboot-Hauptklasse haben. Wenn sich Ihre Hauptanwendungsklasse in einem Root-Paket befindet, kann die Annotation @ComponentScan verwendet werden, ohne dass ein basePackage-Attribut angegeben wird. Andernfalls müssen Sie das Basispaketattribut angeben. Sie müssen die basePackage angeben ähnliche Attribut an die unten:

@ComponentScan("<your_package_to scan_for beans>") 

Auch die @EnableAutoConfiguration Anmerkung oft auf Ihrem Hauptfeder Boot Anwendungsklasse platziert wird. Dies definiert implizit ein Basispaket, um nach Komponenten zu suchen.

+0

Meine Haupt-App-Klasse befindet sich im Root-Paket und ist bereits mit '@ SpringBootApplication' markiert, die '@ EnableAutoConfiguration' und '@ ComponentScan'. Alle anderen Beans von eingebetteten Paketen werden korrekt eingefügt – piphonom

Verwandte Themen