来自另一个JAR

时间:2017-11-14 12:08:37

标签: spring spring-mvc intellij-idea jar

我正在导出一个包含类的JAR:

public class SerializerHelper {
    public String toJson(final Object src) {...}
}

和trialApplicationContext.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"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="serializerHelper" class="com.trial.SerializerHelper"/>

</beans>

然后,我将该JAR导入另一个项目,并在其applicationContext.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"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Replace all @Autowired by its instances -->
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

    <import resource="classpath*:trialApplicationContext"/>

    <bean id="booksSerializer" class="com.trial.BooksSerializerImpl" />
    ...

</beans>

然后,我在我班上使用那个bean:

public interface BooksSerializer {
    String getBooks();
}

public class BooksSerializerImpl implements BooksSerializer {

    @Autowired
    private SerializerHelper serializerHelper;

    ...

}

但是,代码失败并出现以下错误:

  

java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:在URL [... applicationContext中定义的名称为'booksSerializer'的bean创建时出错。 xml]:合并bean定义的后处理失败;嵌套异常是java.lang.IllegalStateException:无法为自动装配元数据内省bean类[com.trial.BooksSerializerImpl]:找不到依赖于它的类   java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:在URL中定义名为'booksSerializer'的bean时出错[jar:file:/ ... .jar!/applicationContext.xml]:合并bean定义的后处理失败;嵌套异常是java.lang.IllegalStateException:无法为自动装配元数据内省bean类[com.trial.BooksSerializerImpl]:找不到依赖于它的类       在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:921)       在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:900)       在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:684)       在com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2044)       在com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1690)       在com.sun.enterprise.web.WebApplication.start(WebApplication.java:107)       在org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)   java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:创建名为'booksSerializer'的bean在URL [jar: file:/ .... jar!/ applicationContext]:合并bean定义的后处理失败;嵌套异常是java.lang.IllegalStateException:无法为自动装配元数据内省bean类[com.trial.BooksSerializerImpl]:找不到依赖于它的类       在com.sun.enterprise.web.WebApplication.start(WebApplication.java:136)       在org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)   java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:在URL中定义名为'productSerializer'的bean时出错[jar: file:/ .... jar!/applicationContext.xml]:合并bean定义的后处理失败;嵌套异常是java.lang.IllegalStateException:无法为自动装配元数据内省bean类[com.trial.BooksSerializerImpl]:找不到依赖于它的类       在com.sun.enterprise.web.WebApplication.start(WebApplication.java:136)       在org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)     加载应用程序时出现异常:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:创建名为'booksSerializer'的bean在URL [jar: file:/ .... jar!/applicationContext.xml]:合并bean定义的后处理失败;嵌套异常是java.lang.IllegalStateException:无法为自动装配元数据内省bean类[com.trial.BooksSerializerImpl]:找不到它依赖的类]]

当我尝试在泽西服务器上运行项目时,会发生此错误。

我做错了什么?非常感谢。

1 个答案:

答案 0 :(得分:1)

请使用上下文组件扫描来扫描您的包,以便弹簧容器可以发现您的声明spring bean。 在applicationContext.xml

中声明它
<context:component-scan base-package="com.jartrial.*, com.trial.*" />