您的位置:首页 > 其它

s2sh整合步骤

2015-04-30 10:12 134 查看
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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: