spring学习笔记 -- day05 spring整合Junit

来源:互联网 发布:unity3d 微信登录 ios 编辑:程序博客网 时间:2024/06/06 15:59

一、准备测试环境

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;}@Overridepublic void saveCust() {customerDao.saveCust();}@Overridepublic void deleteCust() {customerDao.deleteCust();}@Overridepublic void updateCust() {customerDao.updateCust();}@Overridepublic 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 {@Overridepublic void saveCust() {System.out.println("执行了保存的方法");}@Overridepublic void deleteCust() {System.out.println("执行了删除的方法");}@Overridepublic void updateCust() {System.out.println("执行了更新的方法");}@Overridepublic 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 {@Autowiredprivate CustomerService custService;@Testpublic void add() {custService.saveCust();}@Testpublic void del() {custService.deleteCust();}@Testpublic void upd() {custService.updateCust();}@Testpublic 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 {@Autowiredprivate CustomerDao customerDao;@Overridepublic void saveCust() {customerDao.saveCust();}@Overridepublic void deleteCust() {customerDao.deleteCust();}@Overridepublic void updateCust() {customerDao.updateCust();}@Overridepublic 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 {@Overridepublic void saveCust() {System.out.println("执行了保存的方法");}@Overridepublic void deleteCust() {System.out.println("执行了删除的方法");}@Overridepublic void updateCust() {System.out.println("执行了更新的方法");}@Overridepublic 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 {@Autowiredprivate CustomerService custService;@Testpublic void add() {custService.saveCust();}@Testpublic void del() {custService.deleteCust();}@Testpublic void upd() {custService.updateCust();}@Testpublic void fin() {custService.findCust();}}

四、为什么不能把注解类配置到xml中

1、配到XML中能不能用呢?

答案是肯定的,没问题,可以使用。

2、为什么不采用配置到xml中的方式呢?

这个原因是这样的:

        第一:当我们在xml中配置了一个bean,spring加载配置文件创建容器时,就会创建对象。

        第二:测试类只是我们在测试功能时使用,而在项目中它并不参与程序逻辑,也不会解决需求上的问题,所以创建完了,并没有使用。那么存在容器中就会造成资源的浪费。

        所以,基于以上两点,我们不应该把测试配置到xml文件中。