您的位置:首页 > 编程语言 > Java开发

<一>Ioc控制反转——手把手教学:如何配置并使用单元测试一个spring框架(附源码)

2014-11-29 09:57 816 查看
所谓spring的ioc控制反转功能,举个例子:

public class PersonServiceBean
{
private PersonDao personDao=new PersonDaoBean();

public void save(Person person){
personDao.save(person);
}
}

其中,PersonDaoBean是在应用内部创建及维护的,所谓控制反转就是应用本身不负责依赖对象的创建及维护,而是交给外部容器来负责

即在bean.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="personService" class="cn.chen.service.impl.PersonServiceImpl"></bean>
<!--class表示类的路径,id表示由spring容器来创建该类的一个对象-->
</beans>




如上,实现控制反转之后,PersonServiceBean类可以改写成如下:
public class PersonServiceImpl
{
private PersonDao personDao;

public void save(Person person){
personDao.save(person);
}
//使用setter方法,让容器把创建好的依赖对象注入到<span style="font-family: Arial, Helvetica, sans-serif;">PersonServiceImpl</span>

public PersonDao getPersonDao() {
return personDao;
}
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
}

所谓依赖注入,就是指运行期间由外部容器动态地将依赖对象注入到组件中。

---------------------------------------------------------------------------------------------------------------------------

下面开始手把手教学:如何配置并使用单元测试一个spring框架:

1、新建一个Java project即可

2、右键项目,build path--->add library

选择JUnit导入单元测试需要的包;

右键项目,build path--->add library

选择MyEclipse library---->spring 2.5.6导入spring需要的包;

(统一导包技巧,右键项目,build path--->configure build path)

3、右击src创建并配置beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="personService" class="cn.chen.service.impl.PersonServiceImpl"></bean>
<!--class表示类的路径,id表示由spring容器来创建该类的一个对象-->
</beans>


4、编写测试代码:

//接口类

package cn.chen.service;

public interface PersonService {
public void save();
}
//实现类

package cn.chen.service.impl;

import cn.chen.service.PersonService;

public class PersonServiceImpl implements PersonService{

@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("我是save()方法");
}

}
//测试类。SpringTest.java。代码中的@BeforeClass、@Test即单元测试的标识

<pre name="code" class="java">public class SpringTest {

@BeforeClass
public static void setUpBeforeClass() throws Exception{

}
@Test public void instanceSpring(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");//读取spring配置文件
PersonService personService = (PersonService) ctx.getBean("personService");//根据id值获得该类PersonService的对象,注意是获得,而不是创建,创建是由spring容器来完成的
personService.save();
}
}



5、注意,如果运行该项目的话,会提示 log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). log4j:WARN Please initialize the log4j system properly. 解决方法: 在src目录下新建一个文件:log4j.properties ,文件名就是这个,一个字也不能错,复制一下以下信息到文件中,保存即可
log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.logger.uk.ltd.getahead.dwr=
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) %d{yyyy-MM-dd HH:mm:ss,SSS} ---- %m%n
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %d{yyyy-MM-dd HH\:mm\:ss,SSS} %n%t %c ---- %m%n


6、右击SpringTest.java,run as JUnit TEST .测试完成。

源码下载地址:

点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: