初识SSH2——applicationContext.xml基础配置

来源:互联网 发布:mac office 64位 编辑:程序博客网 时间:2024/05/15 00:18

(由于实在是被2本800多页的SSH框架学习资料吓到之后,开始了‘投机取巧’的学习过程)

于是挑着看了资料书和网上关于struts2、spring、hibernate核心简介的内容,在了解这三个框架各自的工作流程之后,直接大胆的开始学习SSH框架整合(虽然网上资料太多太杂但多找几篇并对比学习还是能迅速掌握)。

在与各种Error打了一整天交道之后,终于整合出了第一个启动Tomcat无错的环境,感觉那叫一个爽,故而删了又搭建,来回爽了3、4次确认可以迅速搭建环境。

但是此时我对于其运行原理还是一窍不通,也就是虽然我搭建起了SSH的开发环境,但是我还不会写一个最简单的Helloword,囧一个先。

此时又被源码吓着了,其实主要是不会有效的看源码,于是乎放弃看源码学习的方法。好吧,怎么办呢?Baidu啊,Baidu不行就Google呗'SSH2 Demo',下了好多别人的demo,但是无奈发现很多看不懂(现在看来我看不懂的原因不仅仅在于我本人...)。

细细筛选下挑出一个实现基本增删改查功能的demo,拉进eclipse里,整体浏览了下目录结构,瞅了下web.xml,又瞄了下struts.xml发现挺冷清的,看来主场不再这诶。跟着线继续走,打开applicationContext.xml,哇塞!热闹诶!开会诶...看来在这里能解决大部分问题了!

 慢慢研读这个applicationContext.xml(感叹一下,有网真赞!),在又经历一天各处取经之后。终于搞明白了SSH整合之后的工作原理,立马有一种拨开云雾见青天的感觉..原来,是这样...终于会简单的使用SSH框架了,剩下的就好办了!

大笑唠叨完了 . . . 跟上笔记和感悟。

 

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- 定义使用C3P0连接池的数据源 --><bean id="mysql" class="org.apache.commons.dbcp.BasicDataSource"><!-- 指定连接数据库的JDBC驱动 --><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><!-- 连接数据库所用的URL --><property name="url"value="jdbc:mysql://localhost:3306/travis"></property><!-- 连接数据库的用户名及密码 --><property name="username" value="root"></property><property name="password" value="123"></property></bean><!-- 定义Hibernate的SessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><!-- 依赖注入上面定义的数据源dataSource --><property name="dataSource"><ref bean="mysql" /></property><!-- 设置Hibernate的相关属性 --><property name="hibernateProperties"><props><!-- 设置Hibernate的数据库方言 --><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>     <!-- 设置Hibernate是否在控制台输出SQL语句,开发调试阶段通常设为true --><prop key="show_sql">true</prop> <!-- 设置Hibernate一个提交批次中的最大SQL语句数 -->                <prop key="hibernate.jdbc.batch_size">20</prop></props></property></bean><!--定义Hibernate的事务管理器HibernateTransactionManager --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><!-- 依赖注入上面定义的sessionFactory --><property name="sessionFactory" ref="sessionFactory" /></bean><!--定义Spring的事务拦截器TransactionInterceptor --><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"><!--  依赖注入上面定义的事务管理器transactionManager --><property name="transactionManager" ref="transactionManager" /><!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 --><property name="transactionAttributes"><props><!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 --><prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop><prop key="list*">PROPAGATION_REQUIRED,readOnly</prop><prop key="load*">PROPAGATION_REQUIRED,readOnly</prop><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="is*">PROPAGATION_REQUIRED,readOnly</prop><!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 --><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean><!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理--><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><!--  针对指定的bean自动生成业务代理 --><property name="beanNames"><list><value>userService</value><value>*Service</value></list></property><!--  这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 --><property name="proxyTargetClass"><value>true</value></property><!--  依赖注入上面定义的事务拦截器transactionInterceptor --><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean><!-- 装配通用数据库访问类BaseDAOImpl --><bean id="userDAO" class="com.hibernate.UserDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><!-- 部署系统用户管理业务逻辑组件userServiceImpl --><bean id="userService"class="com.service.userServiceImpl"><property name="userDAO" ref="userDAO" /></bean><!-- 部署Struts2负责系统用户管理的控制器userAction --><bean id="userAction" class="com.action.userAction"scope="prototype"><property name="service" ref="userService" /></bean></beans>


 其中引起注意的部分是进行spring事务处理部分的配置,因为看的资料多,所以发现竟然出现了很多种不同的class属性,如下:

  1. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  2. <bean class="org.springframework.aop.framework.autoproxy.TransactionProxyFactoryBean">  
  3. <bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

2.示例代码

<!-- 定义TransactionProxyFactoryBean,该bean是个bean后处理器,无需被引用,因此没有id属性-->       <bean class="org.springframework.aop.framework.autoproxy.TransactionProxyFactoryBean">        <!--  指定对满足哪些bean name的bean自动生成业务代理 -->           <property name="beanNames">               <!--  下面是所有需要自动创建事务代理的bean-->               <list>                   <value>*Dao</value>               </list>               <!--  此处可增加其他需要自动创建事务代理的bean-->           </property>           <!--  下面定义TransactionProxyFactoryBean所需的事务拦截器-->           <property name="interceptorNames">               <list>                   <value>transactionInterceptor</value>                       <!-- 此处可增加其他新的Interceptor -->               </list>           </property>       </bean>

3.示例代码

 摘自http://7-sun.com/doc/spring2.5_doc_cn/org/springframework/transaction/interceptor/TransactionProxyFactoryBean.html

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"     abstract="true">   <property name="transactionManager" ref="transactionManager"/>   <property name="transactionAttributes">     <props>       <prop key="insert*">PROPAGATION_REQUIRED</prop>       <prop key="update*">PROPAGATION_REQUIRED</prop>       <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>     </props>   </property> </bean> <bean id="myProxy" parent="baseTransactionProxy">   <property name="target" ref="myTarget"/> </bean> <bean id="yourProxy" parent="baseTransactionProxy">   <property name="target" ref="yourTarget"/> </bean> 
注意target
<!-- 截自某个配置文件 --!>         <bean id="userServiceTarget"class="com.test.service.impl.UserServiceImpl"><property name="userDao" ref="userDao"></property></bean><bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="target" ref="userServiceTarget"></property><property name="transactionManager" ref="transactionManager"></property><property name="transactionAttributes"><props><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean><bean id="saveUserAction"class="com.test.action.user.SaveUserAction" scope="prototype"><property name="service" ref="userService"></property></bean><bean id="listUserAction"class="com.test.action.user.ListUserAction" scope="prototype"><property name="service" ref="userService"></property></bean>


 

笔记记录中...

(如果您知道我在文中所提及的疑惑,麻烦给予指点!谢谢!)