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 .测试完成。
源码下载地址: