Spring在路径中找不到配置

时间:2012-12-09 04:21:45

标签: java spring configuration dependency-injection

我正在运行此代码并且无法找到springconfig4.xml文件:

package com.nortal.pirs.test.independant;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test4 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/com/nortal/pirs/beans/springconfig4.xml");
        BeanFactory factory = context;
        Test3 instance = (Test3) factory.getBean("Test3");

        instance.run();
    }
}

我的意思是我希望它不起作用,因为在Java中,当你尝试使用当前包中不存在的路径时,它永远不会起作用。然而,正如我见过的许多Spring教程,它们都显示了这种指定配置文件的方式。

现在我的springconfig4.xml位于我的应用程序的src / com / nortal / pirs / beans文件夹中。那么如何指定它以便可以在这里找到它?

当前的Test4类位于src / com / nortal / pirs / test / independant文件夹中。

我的堆栈跟踪:

    2012-12-09 06:16:15,734 [main] INFO  org.springframework.context.support.AbstractApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@b24044e: startup date [Sun Dec 09 06:16:15 EET 2012]; root of context hierarchy
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/asm/ClassVisitor
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.<init>(AbstractAutowireCapableBeanFactory.java:121)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.<init>(AbstractAutowireCapableBeanFactory.java:168)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.<init>(DefaultListableBeanFactory.java:167)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:195)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:128)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:527)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:441)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.nortal.pirs.test.independant.Test4.main(Test4.java:9)
Caused by: java.lang.ClassNotFoundException: org.springframework.asm.ClassVisitor
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 10 more

我的springconfig4.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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

  <context:component-scan base-package="com.nortal.pirs.businesslogic.logic"></context:component-scan>
  <context:component-scan base-package="com.nortal.pirs.test.independant"></context:component-scan>

</beans>

或者其他地方可能存在问题吗?

6 个答案:

答案 0 :(得分:2)

Exception表示它没有找到类,而不是Spring context xml

Caused by: java.lang.ClassNotFoundException: org.springframework.asm.ClassVisitor

请添加asm依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.asm</artifactId>
    <version>3.1.0.RELEASE</version>
</dependency>

答案 1 :(得分:2)

您的stacktrace指出了这一点:

java.lang.ClassNotFoundException: org.springframework.asm.ClassVisitor

您需要从spring-asm-3.1.2.RELEASE.jar下载maven repo文件(假设您使用的是Spring 3.1.2),或者如果您使用的是maven,请编辑pom.xml文件并添加下一行:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-asm</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

此外,这一行:

ApplicationContext context = new ClassPathXmlApplicationContext("/com/nortal/pirs/beans/springconfig4.xml");

如果有错误,则路径不能以尾随/开头。因此文件的路径变为:"com/nortal/pirs/beans/springconfig4.xml"

ClassPathResource javadoc表示无论如何都会删除它:

  

为ClassLoader用法创建一个新的ClassPathResource。领先的斜线   将被删除,因为ClassLoader资源访问方法不会   接受它。

答案 2 :(得分:2)

添加spring-asm-3.0.1.RELEASE.jarspring-expression-3.0.1.RELEASE.jar

答案 3 :(得分:1)

  

java.lang.ClassNotFoundException:org.springframework.asm.ClassVisitor

只需添加spring-asm-3.1.2.RELEASE.jar文件即可。将它放在你的lib文件夹中。

答案 4 :(得分:0)

对于上面提到的上述问题,缺少这些罐子,即1.org.springframework.asm-3.0.1.RELEASE-A.jar 2.org.springframework.expression-3.0.1.RELEASE-a.jar文件 要么 添加所有核心Jars of Spring ,以便任何新程序员都可以运行所有基本级别程序。

您的计划中不需要以下行。您可以在上述程序中使用工厂上下文

BeanFactory factory = context

我们通常使用 BeanFactory ApplicationContext 。 即使您使用BeanFactory,也不会对该程序产生任何影响。

答案 5 :(得分:0)

添加屏幕中显示的Jars,它将起作用enter image description here