2017-12-06 26 views
0

この問題に関する他の質問がありましたが、実際に問題に役立つものはありません。オートワイヤできませんでした。 'MessagingPropertiesRefactor'タイプのBeanは見つかりません

私はテストクラスでこれらの2つのプロパティを定義しています。

@Autowired 
    private MessagingProperties messagingProperties; 

    @Autowired 
    private MessagingPropertiesRefactor messagingPropertiesRefactor; 

私はMessagingProperties.javaの新しいバージョンを作成しようとしています。私は基本的にこのクラスをコピーし、新しいファイルMessagingPropertiesRefactor.java(同じパッケージ/ディレクトリ)を作成し、同じコードを貼り付けました。私はクラス定義などを変更しましたが、大部分は同じです。

IntelliJの設計時コンパイルエラーが発生しました。「オートワイヤできませんでした。「MessagingPropertiesRefactor」タイプのBeanは見つかりませんでした。

次に、元のクラスのすべての使用法を検索して、どこかで宣言されているかどうかを再確認しますが、何も見つかりませんでした。

私はJava(およびSpring)に「新しい」です。誰も前に同じ問題にぶつかっていますか?

+0

リファクタリングされたクラスは '@ Component'アノテーションを持っていますか? beans.xmlファイルまたはAppConfigクラスファイルにこのクラスのBeanを宣言してください。 – eladyanai

答えて

0

MessagingPropertiesにあるすべての注釈がMessagingPropertiesRefactorに適用されていることを確認してください。存在する場合は、プロジェクトのXML設定でMessagingPropertiesのBean定義を探してコピーを作成してください。

1

MessagingPropertiesRefactorが@Componentでアノテートされていないあなたの新しいクラスを使用すると、いずれかのこのようなbeans.xmlのでそれを宣言するために持っている場合は、次のような

<beans> 
    <bean name="messagingPropertiesRefactor" class="com.package.path.MessagingPropertiesRefactor"/> 
</beans> 

たりAppConfig.javaで:

@Configuration 
public class AppConfig { 
    @Bean 
    public MessagingPropertiesRefactor messagingPropertiesRefactor() { 
     return new MessagingPropertiesRefactor(); 
    } 
} 

Source Reference

1

あなたがテストで春の依存性注入を適用したい場合は、2の基本的なオプションがあります:あなたは、XMLで宣言された豆を持っているXMLファイルにMessagingPropertiesMessagingPropertiesRefactorの両方を宣言し、テストに注釈を付けたい場合は

  1. @RunWith(SpringRunner.class)  
    @ContextConfiguration("your.xml") 
    

    豆は正常にautowiredする必要があります。 JavaConfigで宣言された豆を持っている

  2. 、以下

    2.1を実行します。次のようなテストクラスに注釈を付けてください:

    2.2。テストクラスの内部では、あなたが必要と豆をdeclatesコンテキストコンフィギュレーションクラスを定義します。

    @Configuration  
    static class Config { 
    
        @Bean 
        public MessagingProperties messagingProperties() { 
         // Assuming MessagingProperties has default ctor. 
         return new MessagingProperties(); 
        } 
    
        // Same for MessagingPropertiesRefactor 
    } 
    


    *コンフィグクラスはテストクラスの中に入れ子にする必要はありません:) autowired豆をお楽しみください。

トピックに関する詳細は、Springのドキュメントhttps://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-javaconfigの第3.5.4項を参照してください。コンテキスト管理。

0

私はそれを「豆」にするコードの「魔法の」行を見つけました。

@EnableConfigurationProperties({MessagingProperties.class, MessagingPropertiesRefactor.class}) 
public class MessagingConfiguration { 

@Autowired 
    private MessagingProperties messagingProperties; 

@Autowired 
    private MessagingPropertiesRefactor messagingProperties; 

したがって、このクラスを@EnableConfigurationProperties属性に追加するだけで済みます。それから、@Autowired属性を使ってanywereを使うことができます。

今、なぜか、私は知らない(私が言ったように、私はjavaに "新しい"です)、私は誰かがこれを詳しく説明するのが大好きです。

+0

クラス 'MessagingPropertie'と' MessagingPropertiesRefactor'は '@ ConfigurationProperties'として注釈が付けられていますか?もしそうなら、魔法はありません。注釈 '@ EnableConfigurationProperties'には、それらを有効にした、つまりBeanとして登録しました。 – PresentProgrammer

+0

しかし、これは、ConfigurationPropertiesをオートワイヤするための良いアプローチとは思われません。豆を自動整流して「通常の」オブジェクトのように扱う、つまり明示的にメソッドを呼び出す手法を探している場合は、解答で提案されている解決策の1つを適用する方がよいでしょう。あなたのケースは具体的かもしれませんが、質問からはっきりとは分かりません。 – PresentProgrammer

関連する問題