Java 找不到引用的Bean

Java 找不到引用的Bean,java,xml,spring,spring-mvc,Java,Xml,Spring,Spring Mvc,我是Spring新手,正在使用Spring3.2.5版本。我有一个名为MongouseRDeailsService的自定义用户详细信息服务。这是我的application-security.xml <http auto-config="true"> <intercept-url pattern="/secured/*" access="ROLE_USER" /> <form-login login-processing-url="/login" logi

我是Spring新手,正在使用Spring3.2.5版本。我有一个名为MongouseRDeailsService的自定义用户详细信息服务。这是我的application-security.xml

<http auto-config="true">
  <intercept-url pattern="/secured/*" access="ROLE_USER" />
    <form-login login-processing-url="/login" login-page="/loginPage"
        username-parameter="username" password-parameter="password"
        default-target-url="/secured/mypage" authentication-failure-url="/loginPage?auth=fail" />
    <logout logout-url="/logout" logout-success-url="/logoutPage" />        
</http>

<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="mongoUserDetailsService">
        <password-encoder hash="plaintext" />
    </authentication-provider>
</authentication-manager>

这是我的dispatcher-servlet.xml

<context:component-scan base-package="com.srccodes.spring.controller" />

<mvc:annotation-driven />

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="mongoUserDetailsService" class="com.srccodes.spring.security.MongoUserDetailsService">
</bean>

我在提供身份验证提供程序的application-security.xml中收到一个bean not found错误。我已经检查了路径,它们是正确的

我也在添加web.xml

    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Spring context files to be loaded -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml,
        /WEB-INF/application-security.xml,
        /WEB-INF/mongo-config.xml
    </param-value>
</context-param>

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


<!-- filter declaration for Spring Security -->
<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

调度员
org.springframework.web.servlet.DispatcherServlet
1.
调度员
/
上下文配置位置
/WEB-INF/applicationContext.xml,
/WEB-INF/application-security.xml,
/WEB-INF/mongo-config.xml
org.springframework.web.context.ContextLoaderListener
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*

在application-security.xml文件中,必须导入dispatcher-servlet.xml以下代码显示了导入sysntax: 1-如果dispatcher-servlet.xml是buildPath:

<import resource="classpath:DIR/dispatcher-servlet.xml" />

2-如果是WEB-INF目录

<import resource="DIR/dispatcher-servlet.xml" />


如果您已将
应用程序安全性.xml
定义为根上下文(即,通过…ContextLoaderListener加载),并通过
DispatcherServlet
DispatcherServlet.xml
定义为根上下文,则您将遇到可见性/范围问题。DispatcherServlet上下文是根上下文的子上下文,因此在DispatcherServlet上下文中定义的bean对根上下文不可见,但根上下文bean对所有子servlet上下文可见

因此,将您的
mongouserdeailsservice
移动到您的application-security.xml

更新:

您将加载dispatcher-servlet.xml配置两次,一次是在

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/dispatcher-servlet.xml
        /WEB-INF/application-security.xml
        /WEB-INF/mongo-config.xml
    </param-value>
</context-param>

上下文配置位置
/WEB-INF/dispatcher-servlet.xml
/WEB-INF/application-security.xml
/WEB-INF/mongo-config.xml
并且再次隐式地(根据Spring约定)使用DispatcherServlet。为了更好地理解ApplicationContext和DispatcherServlet,您应该查看

  • 您需要从contextConfigLocations中删除dispatcher-servlet.xml
  • dispatcher-servlet.xml应该只包含Spring MVC相关的配置。除非是您的意图,否则下面的组件扫描太过包容,您应该将其限制为与spring mvc相关的(例如控制器),将安全性、存储库等内容移动到根上下文
  • 
    
  • 将MongouseRDeailsService移动到application-security.xml

  • 显示一个错误,表示dispatcher-servlet.xml中不允许导入。很抱歉,回复太晚。。。迫切需要。如何将服务移动到application-security.xml?请看一下我添加的web.xml。我删除了dispatcher-servlet.xml。然后,我将安全性和存储库转移到applicationContext.xml。(新文件)。我无法将MongouseRDeailsService迁移到application-security.xml。我试过。。。但是弹出一个错误。这是唯一能支撑的部分。你能举个例子吗?
    <context:component-scan base-package="com.srccodes.spring" /> 
    <context:component-scan base-package="com.srccodes.spring.security" />
    <context:component-scan base-package="com.srccodes.spring.domain" />
    <context:component-scan base-package="com.srccodes.spring.repositories" />
    <context:component-scan base-package="com.srccodes.spring.controller" />