2017-09-01 140 views
0

是否有可能在Spring Boot中自動裝入標記爲@ManagedResource的對象。我試圖這樣做,但對象是nullSpring Boot autowire @ManagedResource

例如:

@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; 
    } 
} 

春天創造適當的MBean。但是,當我嘗試自動裝配這個對象來使用它的屬性我得到

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

**修正**。問題根本不在'@ ManagedResource'中。問題出現在_field注射中。 _Constructor injection_解決了我的問題。欲瞭解更多信息,請參閱[https://stackoverflow.com/questions/39890849/what-exactly-is-field-injection-and-how-to-avoid-it](https://stackoverflow.com/questions/39890849/什麼,確切的是現場注入和如何避免,它) – piphonom

+0

本文可以澄清一些觀點:[http://www.baeldung.com/running-setup-logic-on-startup-in -spring](http://www.baeldung.com/running-setup-logic-on-startup-in-spring) – piphonom

回答

1

如果你的配置不正確定義的@Autowired對象可能不會被初始化。 Spring掃描指定軟件包中的託管組件。我假設你在彈簧主要類中有@ComponentScan註釋。如果您的主應用程序類位於根包中,則可以使用@ComponentScan註釋而不指定basePackage屬性。否則,您需要指定基本包屬性。你需要指定basePackage屬性類似於下面:

@ComponentScan("<your_package_to scan_for beans>") 

另外,@EnableAutoConfiguration註解往往放在你的主彈簧啓動應用程序類。這隱含地定義了一個基礎包來搜索組件。

+0

我的主應用程序類是在根包中,並且已經用'@ SpringBootApplication'標記,包括'@ EnableAutoConfiguration'和'@ ComponentScan'。所有其他來自嵌入式軟件包的bean都被正確注入 – piphonom