一、准备测试环境
1、创建项目,导入jar包
注意:要额外导入spring-test-4.2.4.RELEASE.jar
此jar包中的运行函数知道spring容器的存在。
2、整合所用的注解详解
@ContextConfiguration:用于指定spring配置文件的位置
@RunWith:用于替换Junit中的运行器
3、准备service层和dao层代码
package cn.itcast.service;
/**
* service层接口
* @version V1.0
*/
public interface CustomerService {
public void saveCust();
public void deleteCust();
public void updateCust();
public void findCust();
}
package cn.itcast.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import cn.itcast.dao.CustomerDao;
import cn.itcast.service.CustomerService;
/**
* 业务层实现类
*/
public class CustomerServiceImpl implements CustomerService {
private CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
@Override
public void saveCust() {
customerDao.saveCust();
}
@Override
public void deleteCust() {
customerDao.deleteCust();
}
@Override
public void updateCust() {
customerDao.updateCust();
}
@Override
public void findCust() {
customerDao.findCust();
}
}
package cn.itcast.dao;
/**
* 持久层接口
*
* @version V1.0
*/
public interface CustomerDao {
public void saveCust();
public void deleteCust();
public void updateCust();
public void findCust();
}
package cn.itcast.dao.impl;
import cn.itcast.dao.CustomerDao;
public class CustomerDaoImpl implements CustomerDao {
@Override
public void saveCust() {
System.out.println("执行了保存的方法");
}
@Override
public void deleteCust() {
System.out.println("执行了删除的方法");
}
@Override
public void updateCust() {
System.out.println("执行了更新的方法");
}
@Override
public void findCust() {
System.out.println("执行了查询的方法");
}
}
二、使用xml配置方式
1、编写配置文件
<?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">
<!-- Service层 -->
<bean id="custService" class="cn.itcast.service.impl.CustomerServiceImpl">
<property name="customerDao" ref="customerDao"></property>
</bean>
<!-- Dao层 -->
<bean id="customerDao" class="cn.itcast.dao.impl.CustomerDaoImpl"></bean>
</beans>
2、编写测试类
package cn.itcast.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.itcast.service.CustomerService;
/**
* 客户操作的测试类
*
* @version V1.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:beans.xml") // 指定spring配置文件位置
public class CustTest {
@Autowired
private CustomerService custService;
@Test
public void add() {
custService.saveCust();
}
@Test
public void del() {
custService.deleteCust();
}
@Test
public void upd() {
custService.updateCust();
}
@Test
public void fin() {
custService.findCust();
}
}
三、使用纯注解配置方式
1、什么是纯注解
没有bean.xml配置的文件的方式
2、改造servcie层和dao层,使用注解配置
package cn.itcast.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.itcast.dao.CustomerDao;
import cn.itcast.service.CustomerService;
/**
* 业务层实现类
*/
@Service("custoemrService")
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;
@Override
public void saveCust() {
customerDao.saveCust();
}
@Override
public void deleteCust() {
customerDao.deleteCust();
}
@Override
public void updateCust() {
customerDao.updateCust();
}
@Override
public void findCust() {
customerDao.findCust();
}
}
package cn.itcast.dao.impl;
import org.springframework.stereotype.Repository;
import cn.itcast.dao.CustomerDao;
@Repository("customerDao")
public class CustomerDaoImpl implements CustomerDao {
@Override
public void saveCust() {
System.out.println("执行了保存的方法");
}
@Override
public void deleteCust() {
System.out.println("执行了删除的方法");
}
@Override
public void updateCust() {
System.out.println("执行了更新的方法");
}
@Override
public void findCust() {
System.out.println("执行了查询的方法");
}
}
3、创建配置文件类
package cn.itcast.conf;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* spring配置稳健类
*
* @version V1.0
*/
@Configuration
@ComponentScan(basePackages={"cn.itcast"})//配置扫描的包
public class SpringConfig {
}
4、编写测试类
package cn.itcast.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.itcast.conf.SpringConfig;
import cn.itcast.service.CustomerService;
/**
* 客户操作的测试类
*
* @version V1.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=SpringConfig.class) // 指定spring配置文件位置
public class CustTest {
@Autowired
private CustomerService custService;
@Test
public void add() {
custService.saveCust();
}
@Test
public void del() {
custService.deleteCust();
}
@Test
public void upd() {
custService.updateCust();
}
@Test
public void fin() {
custService.findCust();
}
}
四、为什么不能把注解类配置到xml中
1、配到XML中能不能用呢?
答案是肯定的,没问题,可以使用。
2、为什么不采用配置到xml中的方式呢?
这个原因是这样的:
第一:当我们在xml中配置了一个bean,spring加载配置文件创建容器时,就会创建对象。
第二:测试类只是我们在测试功能时使用,而在项目中它并不参与程序逻辑,也不会解决需求上的问题,所以创建完了,并没有使用。那么存在容器中就会造成资源的浪费。
所以,基于以上两点,我们不应该把测试配置到xml文件中。