2017-06-03 19 views
0

コンポーネントスキャンについて読みましたが、構成クラスが自動スキャンされていることが分かっています。私の質問私は、次のしている場合:それは作成の内側クラス@自動スキャンの場合、Spring @Beanが自動的にスキャンされます

@Configuration 
public class AppConfig { 
@Bean(name="authenticationService") 
    public AuthenticationService getAuthenticationService(){ 
     return new AuthenticationService(); 
    } 
} 

を@Configurationがすでにスキャンされた場合は、(そのアプリの設定が利用できるようになります)、豆のではないでしょうか? @Beanが自動スキャンされていないと言って少し混乱します。

+0

いいえ、そうではありません。 AppConfigでSpringがAuthenticationServiceのBeanを作成したい場合は、@Autowiredを使用してください。 '@Autowired private AuthenticationService authenticationService; – harshavmb

+0

あなたの質問に対する答えは、スキャンするものがないので' @ Bean'メソッドをスキャンしません。しかし、あなたが望む答えは「はい」です。これは、 'AuthenticationService'のインスタンスが作成されます。なぜなら、それが' @ Bean'メソッドを持っているからです。したがって、 '@ Bean 'はスキャンされません。単にBeanの作成方法を示すものに過ぎません。 XMLの ''要素のように。 –

+0

返信ありがとうございます、クラスが自動的にスキャンされたら、Beanは作成されるでしょうか? –

答えて

-1

いいえ、春は@Beanの方法をスキャンしません。

newキーワードを使用する他のJavaプログラムと同様に、AuthenticationServiceのBeanを作成します。

あなたは春ホープ、このことができます@Autowired注釈

@Autowired 
private AuthenticationService authenticationService; 

を使用し、AppConfigクラスでAuthenticationServiceのBeanを作成する場合それはAuthenticationService authenticationService = new AuthenticationService();

と同じです!

EDIT:

M.Deinum @は、春は@Autowired注釈に基づいてBeanを作成しないことを私に修正しました。 Beanは、そのクラスに@ Component/@Configuration/@Serviceアノテーションを付けると、春に自動的に作成されます。

@ M.Deinum、ありがとう。

+0

私の主な質問は、その豆は自動スキャンによって見られるでしょうか? @Beanはコンポーネントスキャンでは検出されません。それがどのように熟しているかを検出できなければ –

+0

いいえ、それはできません。 '@ Autowired'は何も生成しません。それはあなたがそのタイプの何かを注入したいだけのマーカー/トリガです。このタイプはコンポーネントスキャンされ、それ自体が '@ Component'で注釈付けされるか、' @ Bean'メソッド(またはXML ''。 –

+0

@ M.Deinumの等価物)を使用して '@ Configuration'クラスで作成されなければなりません「最後に@Autowired annotation。」とマークされた豆が作成されますが、これは間違った文ですか?注釈はメタデータ部分以外は何もしません。私の理解が間違っている場合は、修正してください。 – harshavmb

関連する問題