java - Spring在路径中找不到配置

标签 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>

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

最佳答案

您的堆栈跟踪指出:

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声明无论如何都会将其删除:

Create a new ClassPathResource for ClassLoader usage. A leading slash will be removed, as the ClassLoader resource access methods will not accept it.

关于java - Spring在路径中找不到配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784612/

相关文章:

java - 为什么spring应用程序上下文每次都要加载

java - 将对象写入 Flux

linux - 如何更新组级别的 linux 老化信息

java - spring java配置环境变量

c# - 如何修改以前配置的 StructureMap 配置?

java - JMS QueueBrowser 卡在 getEnumeration() 上

java - 暂停执行 main 方法中的循环,直到所有线程完成 Java 1.5

java - 禁用 csrf 会为 Spring boot 2.0 提供 404

spring - 在Idea中部署到tc服务器

java - 后台蓝牙通信。线程、服务、IntentService、AsyncTask..?