String声明事务、数据源优化配置、配置文件的拆分

1 Spring的声明式事务使用步骤(XML版本):

给当前项目增加Spring事务依赖包spring-tx.jar
2 给Spring的配置文件增加事务的头部文件声明
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
3 配置事务管理器


<!-- 配置spring的事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTranscationManager">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>

4 配置声明式事务的规则



	<!-- 配置事务管理策略 transaction-manager="transactionManager的值和事务管理器的id保持一致 -->
	<tx:advice id="txadvice" transaction-manager="transactionManager">
		<!-- 配置具体的策略 -->
		<tx:attributes>
		<!-- 增删改查的方法 timeout="10"超时时间,-1指的是无限 rollback-for遇到?允许回滚-->
              <tx:method name="get*" propagation="REQUIRED" timeout="10"/>
              <tx:method name="add*" propagation="REQUIRES_NEW" rollback-for="SQLException"/>
              <tx:method name="update*" propagation="REQUIRED" timeout="10"/> 
              <tx:method name="delte*" propagation="REQUIRED" timeout="10"/>
		</tx:attributes>
	</tx:advice>

5 事务的增强处理:

<!-- 事务策略的配置应用 -->
	<aop:config>
	 <!-- 配置切入点 --> 
	<aop:pointcut expression="execution(* com.oupeng.service..*.*(..))" id="p1"/>
	 <!-- 增强处理 --> 
	<aop:advisor advice-ref="txadvice" pointcut-ref="p1"/> 
		</aop:config>

6 测试

@Test
        public void test1() {
        	ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            List<User> list=new ArrayList();
            UserService us=(UserService) context.getBean("userService1");

    		User user=new User();
    		user.setUserName("赵");
    		user.setUserRole(2);
    		
    		list=us.findUserList(user);
    	
    		for(User u:list){
    			System.out.println(u.getUserCode()+"\t"+u.getUserName()+"\t"+u.getAddress()+"\t"+u.getUserRoleName());
    		}
        }

2 Spring声明式事务的注解版本:

注释掉上文配置事务管理策略、事务的增强处理配置
1 给业务类增加注解 @Transactional
2 给业务类的方法增加具体的注解策略: @Transactional(propagation=Propagation.REQUIRED)

package com.oupeng.service.impl;

import java.util.List;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.oupeng.dao.UserMapper;
import com.oupeng.pojo.User;
import com.oupeng.service.UserService;

@Transactional
@Service("userService1")
public class UserServiceImpl implements UserService {

	//注入数据访问层依赖(写接口松耦合,面向接口编程)
	@Autowired
	private UserMapper userMapper;
	@Transactional(propagation = Propagation.REQUIRED)
	public UserMapper getUserMapper() {
		return userMapper;
	}

	public void setUserMapper(UserMapper userMapper) {
		this.userMapper = userMapper;
	}

	@Override
	public List<User> findUserList(User user) {
		
		return userMapper.getUserList(user);
	}

	@Override
	public boolean addNewUser(User user) {
	    int result=userMapper.add(user);
		return result>0;
	}

}

3 在spring的配置文件启用事务的注解支持:

<!--启用事务注解 -->
		 <tx:annotation-driven transaction-manager="transactionManager"/> 

3 XML版本和注解事务的分析:

xml版本:集中配置事务管理,利于后期软件的维护,配置工作量偏大,影响配置文件的可阅读性
注解版:使用简单、小巧、灵活,缺陷:和java代码糅合到一块,硬编码,不利于后期的维护

4 Spring的自动装配:

  • 按照类型自动装配
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 构造注入sqlSessionFactory -->
 <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
<bean id="userService" class="com.oupeng.service.impl.UserServiceImpl" autowire="byType">
<!-- 完成数据访问层对象的注入 -->
<property name="userMapper" ref="userMapper"></property>
<!-- <property name="userMapper" ref="userMapperProxy"></property> -->
</bean>
  • 按照名称自动装配
<bean id="userService" class="com.oupeng.service.impl.UserServiceImpl" autowire="byName">
<!-- 完成数据访问层对象的注入 -->
<property name="userMapper" ref="userMapper"></property>
<!-- <property name="userMapper" ref="userMapperProxy"></property> -->
</bean>
...http://www.springframework.org/schema/tx/spring-tx-3.2.xsd" default-autowire="byname">

5 数据源优化配置:

<!-- 配置数据源方式2 -->
	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="Location">
			<value>classpath:database.properties</value>
		</property>

	</bean>

	<bean id="dataSource1"
		class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}"></property>
		<property name="url" value="${jdbc.url}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="username" value="${jdbc.username}"></property>
	</bean>
<!-- jndi配置 -->

	<!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
		注入jndi的数据源名 <property name="jndiName"> <value> java:comp/env/jdbc/smbms </value> 
		</property> </bean> -->

6 Spring配置文件的拆分:

为什么拆分:项目配置需要的信息过多,不利于配置文件的配置、容易引起错误,影响可阅读性

拆分的方式:

	按照系统的功能模块拆分:

		applicationContext-user.xml

		applicationContext-provider.xml
		
		applicationContext-bill.xml	
	按照多层开发思想拆分:

范例:
加载引入到applicationContext.xml

<!-- 加载拆分的配置文件 -->
	<import resource="applicationContext-dao.xml"/>
	<import resource="applicationContext-service.xml"/>
<!-- 配置数据源 -->

数据访问层拆分配置(applicationContext-dao.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.2.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.2.xsd" default-autowire="byType">
	
	<!-- 配置数据访问层组件 -->
	<bean id="userMapper" class="com.oupeng.dao.impl.UserMapperImpl">
		<!-- 注入sqlSessionTemplate -->
		<property name="sqlSession" ref="sqlSessionTemplate"></property>
	</bean>
</beans>

业务逻辑层拆分配置(applicationContext-service.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.2.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"
	default-autowire="byType">

<!-- 业务逻辑层组件 -->
	<bean id="userService" class="com.oupeng.service.impl.UserServiceImpl"
		autowire="byName">
		<!-- 完成数据访问层对象的注入 -->
		<!-- <property name="userMapper" ref="userMapper"></property> <property 
			name="userMapper" ref="userMapperProxy"></property> -->
	</bean>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值