Spring MVC在使用Component注释时不检测bean

时间:2016-11-22 18:41:47

标签: java spring spring-mvc

web.xml文件:

void SysTick_Handler() {
  do_high_priority_periodic_tasks(); // not to be interrupted
  // Set the PENDSVSET to trigger a PendSV exception
  SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
}

void PendSV_Handler() {
    do_low_priority_periodic_tasks();  // these may be interrupted
}

servlet-context.xml包含:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml, /WEB-INF/spring-security.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

spring-security.xml contais:

<context:component-scan base-package="com.kb.*" />

和主要部分,

<!-- if uncoment the below line then customAuthenticationProvider is detected -->
<!--    <beans:bean id="customAuthenticationProvider" class="com.kb.authentication.provider.CustomAuthenticationProvider" />
 -->
    <authentication-manager erase-credentials="true">
        <authentication-provider ref="customAuthenticationProvider" />
    </authentication-manager>

@Component public class CustomAuthenticationProvider implements AuthenticationProvider { ... 注释了customAuthenticationProvider,为什么春天无法检测到它?我收到错误:

  

引起:   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   bean名为&#39; customAuthenticationProvider&#39;

xml配置中有一些错误,它可以是什么?

2 个答案:

答案 0 :(得分:1)

如果您正在使用xml配置,那么您需要将<context:annotation-config/>添加到您的配置xml 以便弹出容器以从注释中找到bean ,您可以参考{{ 3}}或者你需要从xml本身提供bean引用(通过取消注释<beans:bean id="customAuthenticationProvider" class="com.kb.authentication.provider.CustomAuthenticationProvider" />

此外,正如DwB建议的那样,您需要将此更改与component-scan更改为<context:component-scan base-package="com.kb" />

答案 1 :(得分:1)

简短回答: 使用正确的基本包名称。

更长的回答: 这不是基本包名称:com.kb.*。 这是包名的梦想。

相反,请使用正确的基本包名称。例如,com.kb

更多回答: 身份验证提供程序中的ref="customAuthenticationProvider"属性似乎是问题所在。 具体来说,没有引用标识为customAuthenticationProvider的bean。

尝试在CustomAuthenticationProvider类上使用@Qualifier注释。