単純なStringをコンストラクタargとしてorg.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint
にあるBeanに挿入しようとしています。このクラスは次のとおりです。Spring:コンストラクタargとしてxml定義BeanにStringを挿入できません
<beans:bean id="authenticationEntryPoint" class="a.b.s.AuthenticationEntryPoint" >
<beans:constructor-arg index="0" type="java.lang.String" value="/login"/>
</beans:bean>
を私が知っているから、これは動作するはずですが、私は次のエラーを取得する:
私のセキュリティのcontext.xmlで@Component
public class AuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
public AuthenticationEntryPoint(String url) {
super(url);
}
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
}
}
、私は次のように私のBeanを定義しています:
<beans:bean id="loginUrl" class="java.lang.String">
<beans:constructor-arg value="/login"/>
</beans:bean>
<beans:bean id="authenticationEntryPoint" class="a.b.s.AuthenticationEntryPoint" >
<beans:constructor-arg index="0" type="java.lang.String" value="/login"/>
</beans:bean>
:奇妙である何
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authenticationEntryPoint' defined in file [/a/b/c/d/target/app/WEB-INF/classes/a/b/s/AuthenticationEntryPoint.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type [java.lang.String] found for dependency [java.lang.String]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency [java.lang.String]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
は、次のような構成で動作するということです
したがって、String Beanを宣言し、それを使用しないと、アプリケーションが実行されません。誰かが私になぜこれが起こっているか説明することができますか?
LE:私は、Springコンテキスト4.3.0と春のセキュリティを使用しています4.1.0
修正: それは、XMLで定義され、また@Componentで注釈されているために、春には、同じタイプの2つのインスタンスを作りますしたがって、春がパッケージをスキャン中にコンストラクタを呼び出そうとしたときに、コンストラクタargとして渡すためのautowired Stringがないときにエラーが発生しました。 @ComponentをAuthenticationEntry Pointクラスから削除するだけで解決しました。
現在の問題は、あなたの@Component
注釈によって引き起こされるこのポスト
コンポーネントスキャンを有効にしているとしますか?この場合、 '@ Component'アノテーション付きBean定義が最初に取り出され、アノテーション設定を使用して文字列に' @ Named'または '@ Value'を挿入しようとします。 – mszymborski
ああ、愚かな私、私はあなたのコメントを読んでいる間にそれを考え出した。 xmlで定義され、 '@ Component'でアノテーションされているので、Springは同じ型の2つのインスタンスを作成するので、Springはパッケージをスキャン中にコンストラクタを呼び出そうとしたときにエラーが発生し、 。私は 'AuthenticationEntryPoint'クラスから' @ Component'を削除するだけで解決しました。ありがとうございます@mszymborski –
私はそれが "未回答"セクションを汚染しないように答えとして投稿する予定です。 – mszymborski