s2sh整合步骤

1. Struts2 + Spring的整合
(1) web.xml
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
(2) 开发Action,注意使用@Controller 以及Struts2的原有注解
@Controller
@ParentPackage("struts-default")
@Namespace("/")
@Scope(value="prototype")//改为多例模式
public class TestAction extends ActionSupport {
private String name = null;
@Action("hello")
public String Hello() throws IOException{
System.out.println(name + " say : Hello World!" );
ServletActionContext.getResponse().getWriter().println("Execute Success");
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(3) 配置applicationContext.xml文件
<!-- 在应用初始化的时候,扫描com.bjsxt.s2sh包,将需要加载的类(@Controller\@Service\@Repository\@Component)初始化到IOC容器 -->
<context:component-scan base-package="com.bjsxt.s2sh"></context:component-scan>
(4) 配置struts.xml,指明struts与spring进行整合
<!-- 这个常量说明,Struts2的Action创建交由Spring进行管理 -->
<constant name="struts.objectFactory" value="spring"></constant>

2. Spring + Hibernate的整合过程
(1) 定义DataSource与SessionFactory
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<!-- 在注解模式下,sf的初始化插件类型为AnnotationSessionFactoryBean -->
<bean id="sf" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="ds"></property>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<!-- 扫描com.bjsxt.s2sh.entity包,将其中所有@Entity的实体类进行加载,从而减少了代码的配置量 -->
<property name="packagesToScan" value="com.bjsxt.s2sh.entity"/>
</bean>
(2) 开发实体类
@Entity
@Table(name="dept")
public class Dept {
@Id
@SequenceGenerator(name="keygen" , sequenceName="seq_dept")
@GeneratedValue(generator="keygen", strategy=GenerationType.AUTO)
private Integer deptno;
private String dname;
private String loc;
}

(3) 开发DAO,注意SessionFactory的注入方式
@Repository
public class DeptDAO extends HibernateDaoSupport{

/**
* 在IOC容器加载的时候,将名为"sf"的对象赋值给形参sessionFactory,
* 再通过super.setSessionFactory()方法给其父类HibernateDaoSupport的sessionFactory对象进行赋值
* @param sessionFactory
*/
@Resource(name="sf")
public void setSuperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}

public void save(Dept dept){
//HibernateTemplate这个对象提供了若干模板方法,用于简化Hibernate操作
//我们可以把HibernateTemplate对象看做是Session对象的扩展,里面的方法使用起来更简单
this.getHibernateTemplate().save(dept);
}
...
}
(4) 利用junit测试通过即可


3. 声明式事务
(1) 在applicationContext.xml中增加事务管理器与开启事务的注解模式
<!-- 定义事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sf"></property>
</bean>
<!-- 开启声明式事务注解模式,并使用txManager作为事务管理器 -->
<tx:annotation-driven transaction-manager="txManager"/>


(2) 在需要声明式事务的Service类上,使用@Transactional注解描述声明式事务
@Service
@Transactional(rollbackFor=java.lang.Exception.class)//在方法上写@Transactional注解代表此方法开启声明式事务,写在类上所有方法均开启声明式事务
public class DeptService {
@Resource
private DeptDAO deptDAO = null;

public void initData() throws Exception{
for(int i = 0 ; i < 10 ; i++){
if(i == 3 ){
//throw new Exception("故意哒");
}
Dept d = new Dept();
d.setDname("DNAME" + i);
d.setLoc("LOC" + i);
deptDAO.save(d);
}
}
public void save(Dept d){
deptDAO.save(d);
}

@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public List<Dept> findAll(){
return deptDAO.findAll();
}

}

猜你喜欢

转载自blog.csdn.net/wjh823177094/article/details/45391295
今日推荐