初学Spring,“No bean named 'beanScope' is defined”这个问题困扰了我好几个小时,查资料无果后,重写好几遍代码后发现问题居然是配置文件不能放在包里。。。要放在src的直接目录下。。。心碎了一地。。。
使用的是 windows 10 / eclipse 4.5.2 /Spring-framework-4.3.0/
下面是我的Spring学习代码:
第一步:下载Spring的jar文件,传送门:http://repo.spring.io/milestone/org/springframework/找到想要的版本后点击下载
第二步:去tomcat官网下载commonts-logging.jar文件,这是使用Spring必须的jar包,传送门:http://commons.apache.org/proper/commons-logging/
因为我用了junit做测试,就也要去下载junit.jar啦,github里面就可以下载:https://github.com/junit-team/junit4/wiki/Download-and-Install,注意哦,在这个页面除了下载junit.jar还要下载hamcrest-core.jar包,同时加入项目才会生效。
第三步:导入相关jar包,我导入的有:
第四步:新建一个bean类,代码如下
packagecom.demo.bean; public classBeanScope { public voidsay() { System.out.println("BeanScope say : " + this.hashCode()); } }
第五步:新建一个xml配置文件spring-beanscope,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean id="beanScope"class="com.demo.bean.BeanScope"scope="singleton"></bean> </beans>
第六步:新建一个测试基类UnitTestBase,代码如下:
packagecom.demo.test.base; importorg.junit.Before; importorg.springframework.beans.BeansException; importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importorg.springframework.util.StringUtils; public classUnitTestBase { privateApplicationContext context; privateString springXmlpath; publicUnitTestBase() {} publicUnitTestBase(String springXmlpath) { this.springXmlpath =springXmlpath; } @Before public voidbefore() { if(StringUtils.isEmpty(springXmlpath)) { springXmlpath = "classpath*:spring-*.xml"; } try{ context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\s]+")); } catch(BeansException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") protected <T extends Object>T getBean(String beanId) { try{ return(T)context.getBean(beanId); } catch(BeansException e) { e.printStackTrace(); return null; } } protected <T extends Object> T getBean(Class<T>clazz) { try{ returncontext.getBean(clazz); } catch(BeansException e) { e.printStackTrace(); return null; } } }
第七步:新建一个测试类TestBeanScope,代码如下:
packagecom.demo.test.bean; importorg.junit.Test; importorg.junit.runner.RunWith; importorg.junit.runners.BlockJUnit4ClassRunner; importcom.demo.bean.BeanScope; importcom.demo.test.base.UnitTestBase; @RunWith(BlockJUnit4ClassRunner.class) public class TestBeanScope extendsUnitTestBase { publicTestBeanScope() { super("classpath*:spring-beanscope.xml"); } @Test public voidtestSay() { BeanScope beanScope = super.getBean("beanScope"); beanScope.say(); } }
最后执行成功!注意配置文件不能放在包里,要直接放在src目录下,否则会报错:No bean named 'beanScope' is defined
最后,当时这个问题困扰了我好久,搞得我搜了好多资料,发现了一个不错的Spring学习平台,推荐一下,哈哈哈:http://www.tutorialspoint.com/spring/index.htm