我正在编写一个简单的Spring 3.1测试,在配置中添加以下行时出现异常:
<context:component-scan base-package="com.software.shared" />
Run Code Online (Sandbox Code Playgroud)
这是例外:
INFO: Loading XML bean definitions from class path resource [spring-config.xml]
Exception in thread "main" java.lang.NoClassDefFoundError: org.springframework.beans.FatalBeanException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:997)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:943)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.software.shared.PersonBeanTest.<init>(PersonBeanTest.java:15)
at com.software.shared.PersonBeanTest.main(PersonBeanTest.java:31)
Run Code Online (Sandbox Code Playgroud)
我不知道发生了什么事。如果我删除该行,则该异常消失,但是自动装配不起作用。
我在类路径中包含spring 3.1 RELEASE发行版中的所有jar,包括org.springframework.beans-3.1.0.RELEASE.jar,并检查了其中是否包含该文件。这是main方法中的代码:
package com.software.shared;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
@Service
public class PersonBeanTest {
public PersonBeanTest() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//System.out.println("Name=" + ((PersonBean) (context.getBean("personBean"))).getName());
}
private PersonBean myBean;
public PersonBean getMyBean() {
return myBean;
}
@Autowired
public void setMyBean(PersonBean myBean) {
this.myBean = myBean;
}
public static void main(String[] args) {
PersonBeanTest test = new PersonBeanTest();
System.out.println("Name=" + test.getMyBean().getName());
}
}
Run Code Online (Sandbox Code Playgroud)
这是Spring配置:
<?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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName">
<!-- <context:component-scan base-package="com.software" /> -->
<!-- Register Annotation-based Post Processing Beans -->
<context:annotation-config />
<!-- Scan context package for any eligible annotation configured beans. -->
<context:component-scan base-package="com.software.shared" />
<bean id="personBean" class="com.software.shared.PersonBean">
<property name="name" value="MyName" />
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
我通过右键单击此类并单击“运行方式-> Java应用程序”来启动应用程序。关于我为什么获得例外的任何想法?
您正在尝试在com.software.shared包中创建spring scan类PersonBeanTest,但是与此同时,您正在PersonBeanTest的构造函数中创建相同的应用程序上下文,我想这是导致异常的根本原因。
尝试扫描其他软件包:
<context:component-scan base-package="some.other.package" />
Run Code Online (Sandbox Code Playgroud)
并使用以下代码段对其进行测试,以查看其是否有效
public class PersonBeanTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
assertNotNull(context.getBean(PersonBean.class));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28152 次 |
| 最近记录: |