1、Spring整个Web层
1)spring管理Action,使用多例管理
Spring整合Struts的方法
设置struts.objectFactory常量(对象工厂) 的值为spring即对象工厂使用org.apache.struts2.spring.StrutsSpringObjectFactory,原来由struts2自己创建对象改为由spring和struts2联合创建。
struts2的对象工厂工作原理:struts2根据请求url创建action的实例时候,先去spring容器中找有没有匹配的bean,如果有匹配的bean,spring接管了action的创建,如果没有匹配的bean,struts2框架自己进行创建action实例。
2)action需要的service由spring注入。
2、Spring整合业务层
1)spring管理Service接口,使用单例管理
2)使用spring声明式事务控制方式对service接口进行事务控制
基于Aop思想进行事务控制,对service产生代理对象,由代理对象进行事务控制。
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 依赖sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 事务控制(增强) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 事务定义信息
rollback-for:默认是RuntimeException,才去回滚
-->
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- aop配置 -->
<aop:config>
<!--pointcut的配置必须找到对应的service即目标对象,影响 是否能够生成代理对象 -->
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.chyson.wap.service.impl.*.*(..))"/>
</aop:config>
3)service需要dao由spring注入
3、Spring整合持久层
1)spring管理Dao接口(IOC管理,对bean进行实例化,进行依赖注入),使用单例管理
使用HibernateTemplate开发,dao接口实现类继承HibernateDaoSupport
2)Dao接口使用Spring提供的HibernateTemplate模板进行开发
Spring提供org.springframework.orm.hibernate5.HibernateTemplate,作用:简化数据库操作,session由spring管理,由spring控制事务。
<!-- 配置hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
3)spring管理sessionFactory,使用单例管理
使用:org.springframework.orm.hibernate5.LocalSessionFactoryBean,sessionFactory由spring管理,spring从工厂中获取Sessoin
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 依赖dataSource -->
<property name="dataSource" ref="dataSource"/>
<!-- 创建工厂需要加载hibernate映射文件 -->
<property name="configLocations" value="classpath:hibernate/hibernate.cfg.xml"></property>
</bean>
4)spring管理数据源,使用c3p0数据库连接池
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>