Spring06

spring-test单元测试

1、使用Spring Test有助于减少启动容器的开销,提高测试效率。
2、Spring Test可以直接使用@AutoWired注入Spring容器或bean。
3、Spring Test还支持事务测试,集成测试等。

Spring测试使用到的注解:
1、SpringTest会先启动Spring容器,把junit运行在Spring容器中;
2、@ContextConfiguration(“classpath:applicationContext.xml”)表示从CLASSPATH路径去加载资源文件;
3、@Autowired表示自动装配,自动从Spring容器中取出对应bean或者获取容器对象;
4、@SpringJUnitConfig(locations = “classpath*:applicationContext.xml”)

Assertions类的一系列静态方法提供了单元测试时常用的断言功能
1.assertEquals([String message,]Object expected,Object actual);
判断是否相等,可以指定输出错误信息。
第一个参数是期望值,第二个参数是实际的值。

2.assertNotEquals([String message,]Object expected,Object actual);
判断是否不相等。
第一个参数是期望值,第二个参数是实际的值。

简单断言
assertEquals 判断两个对象或两个原始类型是否相等
assertNotEquals 判断两个对象或两个原始类型是否不相等
assertSame 判断两个对象引用是否指向同一个对象
assertNotSame 判断两个对象引用是否指向不同的对象
assertTrue 判断给定的布尔值是否为 true
assertFalse 判断给定的布尔值是否为 false
assertNull 判断给定的对象引用是否为 null
assertNotNull 判断给定的对象引用是否不为 null

快速失败可以通过fail方法直接使得测试失败

Spring JDBC

传统应用程序开发中,进行JDBC编程是相当繁琐的
步骤:
1.加载驱动。2.获取JDBC连接。3.构建语句对象
4.执行SQL语句。5.处理结果集。6.释放链接对象

缺点:
1.冗长、重复。2.显式事务控制。3.显示处理受检查异常

DAO是用于访问数据的对象,可以屏蔽了数据存储的最终介质的不同,也屏蔽了具体的实现技术的不同。Spring本质上希望以统一的方式整合底层的持久化机制,以统一的方式进行调用及事务管理,避免让具体的实现侵入到业务层代码中。

模板模式
Spring将相同的数据访问流程固化到模板类中,并将数据访问中固定和变化的部分分开,同时保证模板类是线程安全的【例如jdbc对应的JdbcTemplate】,以便多个数据访问线程共享同一个模板实例。固定部分在模板类中固化出来,而变化部分通过回调接口开发出来,用于定义具体数据访问和结果返回的操作。

Spring中包含支持JDBC的数据访问模块,其提供了简化的JDBC操作,不必手动释放资源,通过使用JdbcTemplate来执行SQL操作。

Spring通过抽象JDBC访问并一致的API来简化JDBC编程的工作量。只需要声明SQL、调用合适的SpringJDBC框架API、处理结果集即可。事务由Spring管理,并将JDBC受查异常转换为Spring一致的非受查异常,从而简化开发。

JdbcTemplate是线程安全的,它内部的状态是dataSource,不会影响会话状态,因此可以将其交给IoC容器管理,然后在DAO中直接注入单例bean实例即可。如果应用程序访问多个数据库,这需要多个数据源,随后需要多个配置不同数据源的 JdbcTemplate 实例。

JdbcTemplate主要提供的方法:
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:
update方法用于执行新增、修改、删除等语句;
batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句
call方法:用于执行存储过程、函数相关语句。

JdbcTemplate类支持的回调类:
预编译语句及存储过程创建回调:用于根据JdbcTemplate提供的连接创建相应的语句。
PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Connection创建相关的PreparedStatement
CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,邮用户使用该Connection创建相关的CallableStatement

预编译语句设置回调:用于给预编译语句相应参数设值。
PreparedStatementStetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值。
BatchPreparedStatementSetter: 类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小。

自定义功能回调:提供给用户一个扩展点,用户可以在指定类型的扩展点执行任何数量需要的操作
ConnectionCallback:通过回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作;
StatementCallback:通过回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作
PreparedStatementCallback:通过回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作
CallableStatementCallback:通过回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作

结果集处理回调:通过回调处理ResultSet或将ResultSet转换为相应的类型
RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs , int rowNum)来完成将每行数据转换为相应的类型。
RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。
ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集

Spring整合Servlet

1、在web项目中需要在web.xml文件中配置启动Spring框架的监听器,用于启动Spring框架。
ContextLoaderListener的作用就是在启动web容器的时候,自动装配ApplicationContext的配置信息,ContextLoaderListener实现了
ServletContextListener这个接口,启动web容器的时候,就会默认执行它实现的方法。

2、在Servlet中自动注入是不可行的,因为要求注入、被注入对象生命周期都被spring ioc管理。这样写无法注入bean
可以通过传递的ServletContext获取Spring的上下文对象,
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());

对于IoC容器的引用
BeanFactory用于内存敏感的受限环境下开发
ApplicationContext接口是BeanFactory的子接口,针对企业级开发提供额外的支持
WebApplicationContext接口是ApplicationContext接口的子接口,通知针对web应用开发提供支持

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值