Spring经典总结(六)
===
12.Spring对数据访问技术的支持
1)提供了一致的异常处理层次
Spring将各种不同访问技术的异常类型封装,统一成了Spring的
异常类型,DataAccessException。
2)提供了编写DAO的一些DaoSupport和Template工具类采用JDBC
技术,提JdbcDaoSupport,JdbcTemplate采用Hibernate,提供
HibernateDaoSupport,HiberanteTemplate
3)提供了声明式事务管理方法
采用AOP机制实现了事务管理,在使用时只要追加事务配置就可以。
13.Spring如何整合JDBC技术
1)引入Spring开发包和配置文件
2)引入JDBC开发包(驱动包)
3)编写数据表对应的实体类POJO
4)编写DAO接口和实现类
实现类 extends JdbcDaoSupport后,可以使用
this.getJdbcTemplate方法获取Template对象。利用Template对
象方法执行增删改查操作。
5)在Spring容器中定义DAO,注意必须给DAO注入一个dataSource
对象。
6)引入dbcp连接池开发包,在Spring容器中定义一个dataSource
对象,给DAO注入.
class="org.apache.commons.dbcp.BasicDataSource">
value="jdbc:oracle:thin:@localhost:1522:xe">
value="oracle.jdbc.driver.OracleDriver">
14.Spring如何整合Hibernate?
1)引入开发框架
--Spring开发包
--
数据库驱动包和dbcp连接池包
--Hibernate开发包
2)在src下添加Spring的配置文件applicationContext.xml
4)编写DAO接口和HibernateDAO实现类
需要继承HibernateDaoSupport,使用HibernateTemplate工具类
完成增删改查操作。
5)需要在applicationContext.xml定义DAO
组件,需要给DAO注入
sessionFactory;SessionFactory需要注入DataSource.
==============================
JdbcCostDAO(JdbcTemplate)<---DataSource
HibernateCostDAO(HibernateTemplate)<---SessionFactory<---DataSource
==============================
15.Spring如何与Struts2整合
1)将Action纳入到Spring容器中
可以采用扫描注解方式也可以采用XML的定义。
2)Action使用Service或DAO组件时,采用注入方式,将Service
和DAO给Action注入
3)引入一个struts2-spring-plugin-2.1.8.jar开发包(当发生action请
求时,StrutsFilter控制器会通过该开发包去Spring容器寻找Action
对象,进行请求处理 )
===struts2-spring-plugin-2.1.8.jar原理=====
该组件提供了一个StrutsSpringObjectFactory,当引入该jar包后,会利用StrutsSpringObjectFactory替代原Struts框架中的ObjectFactory负责生成Action对象。
StrutsSpringObjectFactory可以访问Spring容器。
该Factory会按struts.xml中配置的class属性值作为原则寻找Spring容器中的Bean对象。
a.利用class属性当做Bean组件的id值去Spring容器寻找
4-1)修改struts.xml中所有的class属性值,修改成容器中对应Action组件的id值
b.利用class属性采用反射机制创建普通的action,之后将Spring容器Bean对象给action注入。
4-2)不需要修改原有的struts.xml配置,需要修改Action组件代码,添加setter方法,以setter方式接收注入的DAO或Service.例如要注入容器中的costDAO,
就需要在Action中追加setCostDAO(){}
====================================
5)在web.xml中定义ContextLoaderListener,用于在服务器启动时,
实例化Spring容器。
StrutsSpringObjectFactory主要实现
try{
//利用class属性去容器寻找
Object action = ac.getBean(className);
}catch(Exception ex){
//利用class属性找不到,尝试利用className采用反射机制创
建一个常规的action对象.
//如果创建了action对象,会将Spring容器中的Bean对象给
action对象注入。(默认采用名称匹配规则,容器中Bean的Id
值和Action的set属性一致,就自动注入 )
}