我正在运行此代码并且无法找到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>
或者其他地方可能存在问题吗?
答案 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.jar
和spring-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)