Spring+Struts2/Hibernate 学习笔记
============Spring与Struts2整合============
(1)拷JAR包(Spring、Struts2)
(2)配置org.springframework.web.context.ContextLoaderLisener来加载Spring容器
默认以WEB-INF/applicationContext.xml作为配置文件
如果配置文件不叫该名称,或者没放在该路径下,那就应该配置contextConfigLocation参数
(3)配置Struts2的核心Filter
核心Filter要去加载Struts2的配置文件
(4)Stuts2与Spring整合之后的区别:
A. 调用业务逻辑组件方法之前,无需自己创建业务逻辑组件,要为它提供setter方法
B. 复制struts-spring-plugin.jar包到WEB-INF/lib目录下
该JAR包会把配置在struts-config.xml文件中的Action交给Spring去管理
C. Spring将根据自动装配的策略把Service组件注入到Action。
自动装配的策略:byName -根据setter方法的名字来注入
byType -根据setter方法的形参类型注入
=========自动装配=========
autowire - 指定自动装配策略
byName 如果是byName的自动装配策略,Spring会负责把setter方法名对应
的Bean注入
如果没有找到,就不执行注入(即不调用这个setter方法)
byType Spring会负责把容器类型为setter方法形参类型的Bean注入进来
如果没有找到,就不执行注入(即不调用这个setter方法)
如果找到了多个Bean,那就报错了,出现异常
autowire-candidate-true/false。如果为false,表明它不作为自动装配的候选人
=====================Spring与Hibernate=======================
Spring与Hibernate的整合
1. 直接在配置文件中配置SessionFactory,Spring容器负责管理SessionFactory
Spring容器就可以SessionFactory注入其他组件中
2. 有效的Session管理
3. 声明式的事务管理
4. 统一的异常包装
Spring为简化Hibernate操作提供了一个类:HibernateTemplate
门面模式:实际上,我们应该只要传入hq1、val1、val2、val3...程序就应该返回查询结果。
Spring的HibernateTemplate实现了这种门面模式:
- List find(hql)
- List find(String queryString,Object... values)
- List find(hql,Object value)
- get(String entityName,Serializable id)/load(String entityName,Serializable id)
- delete(Object entity)
- save(Object entity)/persist(Object entity)
- update/saveOrUpdate(Object entity)
/******************************************
在原来的Hibernate查询里:
Session sess=sf.openSession()
Transaction tx=sess.beginTranasction();
Query query=sess.creatQuery("from...");
query.setParameter(val1);
query.setParameter(val2);
query.setParameter(val3);
query.list();
如果用传统的Hibernate编程模式,需要有顺序地、依次调用3个API的方法。
******************************************/
Spring为简化Hibernate操作提供了一个类:HibernateTemplate
主要为HibernateTemplate传入一个SessionFactory,接下来的绝大部分持久化操作只要一行代码即可搞定。