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

(由于实在是被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"?>
<beans
	xmlns="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的事务处理-->
	<bean
		class="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>


 

笔记记录中...

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值