0

好吧,我正在运行这段代码,但它找不到 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>

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

4

6 回答 6

2

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

于 2015-04-30T06:41:18.523 回答
2

异常说它没有找到一个类,而不是 Spring 上下文 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>
于 2012-12-09T04:24:54.647 回答
2

您的堆栈跟踪指出了这一点:

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

您需要从maven repo下载spring-asm-3.1.2.RELEASE.jar文件(假设您使用的是 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 资源访问方法将不接受它。

于 2012-12-09T04:44:55.427 回答
1

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

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

于 2016-08-01T14:34:58.763 回答
0

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

您的程序中不需要以下行。你可以在上面的程序中使用工厂的上下文insted 。

BeanFactory 工厂 = 上下文

我们通常使用BeanFactoryApplicationContext。即使你使用 BeanFactory 也不会对程序产生影响。

于 2017-02-23T10:47:52.393 回答
0

添加屏幕简短显示的罐子,它将起作用在此处输入图像描述

于 2017-07-30T10:43:57.087 回答