初识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属性,如下:
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<bean class="org.springframework.aop.framework.autoproxy.TransactionProxyFactoryBean">
<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>
笔记记录中...
(如果您知道我在文中所提及的疑惑,麻烦给予指点!谢谢!)
- 初识SSH2——applicationContext.xml基础配置
- 最新SSH2环境搭建——基础配置(1)
- applicationContext.xml配置
- applicationContext.xml 配置说明
- applicationContext.xml配置分析
- struts2-applicationContext.xml配置
- applicationContext.xml 配置模板
- applicationContext.xml 配置说明
- applicationContext.xml 配置说明
- spring applicationContext.xml配置
- applicationContext.xml 配置方法
- applicationContext.xml 配置说明
- 配置applicationcontext.xml文件
- applicationContext.xml 配置说明
- applicationContext.xml配置分析
- applicationContext.xml 配置说明
- applicationContext.xml配置c3p0
- 配置applicationContext.xml
- 图片和字符串相互转换
- 2011年8月16日19:42:11
- ACMSTEP 2.3.3 Big Number //阶乘位数
- Rich Internet application
- 改变
- 初识SSH2——applicationContext.xml基础配置
- 处理多进程的一个比较好的例子
- java编程中'为了性能'一些尽量做到的地方
- 封装性是指对外部的封装
- 内存分段(笔记)
- Win32汇编——内存映射文件
- 《大话处理器》连载——微架构(12) 指令的相关
- JSF动态生成菜单
- 1111