0

Beanを作成しようとしていますが、コントローラーに同じものを注入しようとしていますが、Bean作成の失敗エラーが発生します。これが私のコードです。

@Service("springSecurityLoginServiceImpl")
public class SpringSecurityLoginServiceImpl implements SpringSecurityLoginService
{
  //impl
}

これは私が私のコントローラーにそれを注入しようとしている方法です

@Controller
@RequestMapping("springSecurity/login.json")
public class SpringSecurityLoginController
{
    @Autowired
    @Qualifier("springSecurityLoginServiceImpl")
    SpringSecurityLoginService springSecurityLoginService;

}

これらのアノテーションを除いてSpring-MVC-configxmlファイルにエントリはありませんが、サーバーを起動すると次の例外が発生します

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0'
 defined in ServletContext resource [/WEB-INF/config/spring-mvc-config.xml]: 
 Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
 Error creating bean with name 'springSecurityLoginController': 
 Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
 Could not autowire field: com.core.servicelayer.user.SpringSecurityLoginService com.storefront.controllers.pages.SpringSecurityLoginController.springSecurityLoginService; 
 nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
 No matching bean of type [com.core.servicelayer.user.SpringSecurityLoginService] found for dependency: 
 expected at least 1 bean which qualifies as autowire candidate for this dependency.
 Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true),
 @org.springframework.beans.factory.annotation.Qualifier(value=springSecurityLoginServiceImpl)}

何が間違っているのか、何をしなければならないのかわかりません

4

1 に答える 1

1

SpringSecurityLoginControllerclass はSpringSecurityLoginService、Bean が定義されていないクラスを参照します。エラーはそれだけです。

class の Bean を定義しただけなので、それは本当です。LoginServiceImplこれはまったく拡張SpringSecurityLoginServiceされていないようです。

Spring の Bean ルックアップ アルゴリズムは、最初にタイプが である、または extends の Bean を検索しますSpringSecurityLoginService。次に、 を使用して利用可能なオプションを絞り込みますQualifier。この場合、そもそもBeanが見つからない...

春のドキュメントを参照してください:

4.11.3 修飾子を使用したアノテーションベースのオートワイヤーの微調整

タイプによる自動配線は複数の候補につながる可能性があるため、多くの場合、選択プロセスをより詳細に制御する必要があります。これを実現する 1 つの方法は、Spring の @Qualifier アノテーションを使用することです。これにより、修飾子の値を特定の引数に関連付けて、型の一致のセットを絞り込み、各引数に対して特定の Bean が選択されるようにすることができます。

たとえば、LoginServiceImpl実装する必要があります。SpringSecurityLoginService

編集

SpringSecurityLoginService単なるタイプミスだったので、Spring 構成ファイルのタグに's packageを含めていない可能性がありcomponent-scanます (gkamal が既に述べたように)。次のようなものが必要です。

<context:component-scan base-package="org.example"/>

のパッケージorg.exampleに置き換える必要があります。SpringSecurityLoginService

于 2012-06-13T11:57:52.317 に答える