スプリングインジェクションが@Bean
アノテーション付きの呼び出しメソッドをどのように処理するかについて知りたいです。私が入れた場合は@Bean
、インスタンスのメソッドに注釈を、と戻り、私はそれがメソッドを呼び出して、返されたインスタンスを取得することにより、Beanを作成するために、春を告げることを理解しています。ただし、他のBeanを接続したり、他のコードを設定したりするために、そのBeanを使用する必要がある場合があります。これを行う通常の方法は、@Bean
注釈付きメソッドを呼び出してインスタンスを取得することです。私の質問は、なぜこれが原因でBeanの複数のインスタンスが浮かんでいないのですか?
たとえば、次のコード(別の質問からの抜粋)を参照してください。このentryPoint()
メソッドにはの注釈が付けられている@Bean
ので、Springがの新しいインスタンスをBasicAuthenticationEntryPoint
Beanとして作成すると想像します。次に、entryPoint()
configureブロックで再度呼び出しentryPoint()
ますが、Beanインスタンスを返しているようで、何度も呼び出されていません(ロギングを試みましたが、ログエントリが1つしかありませんでした)。entryPoint()
構成の他の部分で複数回呼び出す可能性があり、常に同じインスタンスを取得します。これに対する私の理解は正しいですか?Springは、アノテーションが付けられたメソッドの魔法のような書き直しを行い@Bean
ますか?
@Bean
public BasicAuthenticationEntryPoint entryPoint() {
BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthEntryPoint.setRealmName("My Realm");
return basicAuthEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(entryPoint())
.and()
.authorizeUrls()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
と@Primary
)。