【问题标题】:Spring, component-scan causes FatalBeanException around NamespaceHandlerSpring,组件扫描导致 NamespaceHandler 周围的 FatalBeanException
【发布时间】:2014-03-16 17:34:43
【问题描述】:

当我使用组件扫描时,我得到以下异常:

Caused By: org.springframework.beans.FatalBeanException: Class [org.springframework.context.config.ContextNamespaceHandler] 
for namespace [http://www.springframework.org/schema/context] 
does not implement the [org.springframework.beans.factory.xml.NamespaceHandler] interface
    at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:126)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1433)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:195)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)

这是 XML 配置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

<bean id="version" class="java.lang.String">
    <constructor-arg value="${project.version}"/>
</bean>

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

当我删除 component-scan 时,evertying 被解析得很好,但显然这不是一个解决方案。是什么导致了问题?

我已经阅读了很多关于旧版本 Spring 在类路径中的信息,但我可以验证情况并非如此。

这是我的依赖项,${spring.version} 是 3.2.5-RELEASE。

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

【问题讨论】:

  • 类路径中有上下文支持 jar 吗?
  • 这个错误的另一个主题是classpath上有一个旧版本的spring jar。
  • 愚蠢的问题,但您确实有一个结束 &lt;/beans&gt; 标记,对吧?它在提供的代码中被省略了。
  • 进一步调查,果然有第二个Spring JAR。我们正在使用 WebLogic,并且加载并隐藏了一个“重新打包”的 JAR……所以现在我必须解决这个问题……或者不使用 Autowire!
  • Ugg oracle 去过那里

标签: java spring component-scan


【解决方案1】:

我遇到了类似的错误,但是正在加载的 xml 上下文文件具有对 spring-webmvc 的命名空间引用。我忘记将 mvc 依赖项添加到我的 pom 文件中。

【讨论】:

    【解决方案2】:

    如果罐子已经在耳朵的META-INF/lib 中,这也可能是由于不小心将 Spring deps 包含在薄战争的 WEB-INF/lib 中。

    如果你使用 maven,这很常见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2013-12-03
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多