2017-09-01 15 views
0

Springブートでは、@ManagedResourceでマークされたオブジェクトをautowireすることは可能ですか?私はそれをしようとしていますが、オブジェクトはnullです。例えばSpringブート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の作成します。お使いの設定が適切に定義されていない場合@Autowiredオブジェクトが初期化されないことがあります

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

**固定**。問題は '@ ManagedResource'に全くありませんでした。問題は_field 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 (http://www.baeldung.com/running-setup-logic-on-startup-in-spring) – piphonom

答えて

1

:私はその属性を使用するには、このオブジェクトをautowireしようとすると、しかし、私はヌルを取得しています。 Springは、指定されたパッケージ内の管理対象コンポーネントをスキャンします。私はあなたが春のブートのメインクラスに@ComponentScan注釈を持っていることを前提としています。主なアプリケーションクラスがルートパッケージにある場合は、basePackage属性を指定せずに@ComponentScan注釈を使用できます。それ以外の場合は、基本パッケージ属性を指定する必要があります。あなたはbasePackageは、以下に似た属性を指定する必要があります。

@ComponentScan("<your_package_to scan_for beans>") 

また@EnableAutoConfigurationアノテーションは、多くの場合、自分のメインスプリングブートアプリケーションクラスの上に置かれています。これは、コンポーネントを検索するための基本パッケージを暗黙的に定義します。

+0

私の主なアプリケーションクラスはルートパッケージに入っていて、すでに '@ SpringBootApplication'とマークされています。この中に' @ EnableAutoConfiguration'と '@ ComponentScan'を実行します。組み込みパッケージからの他のすべてのBeanは正しく注入されます – piphonom

関連する問題