`
勤业思行
  • 浏览: 82224 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

Spring中装配Service和Spring配置文件的整合

阅读更多

下面通过一个简单的实例来了解Spring的业务层即相关机制和配置

1、用户登录的UserService

package com.service;
import com.domain.User;
public interface UserService {
    boolean hasMatchUser(String userName,String password);
    User findUserByUserName(String userName);
    void loginSuccess(User user);
}

2、Service实现

package com.service;

import com.dao.LoginLogDao;
import com.dao.UserDao;
import com.domain.LoginLog;
import com.domain.User;

public class UserServiceImpl implements UserService {

	private UserDao userDao;
	private LoginLogDao loginLogDao;

	public boolean hasMatchUser(String userName, String password) {
		int matchCount =userDao.getMatchCount(userName, password);
		return matchCount > 0;
	}
	
	public User findUserByUserName(String userName) {
		return userDao.findUserByUserName(userName);
	}
	
	public void loginSuccess(User user) {
		user.setCredits( 5 + user.getCredits());
		LoginLog loginLog = new LoginLog();
		loginLog.setUserId(user.getUserId());
		loginLog.setIp(user.getLastIp());
		loginLog.setLoginDate(user.getLastVisit());
        userDao.updateLoginInfo(user);
        loginLogDao.insertLoginLog(loginLog);
	}	

	public void setLoginLogDao(LoginLogDao loginLogDao) {
		this.loginLogDao = loginLogDao;
	}                                                                 

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
}

 从上面的代码中我们可以看出:UserServiceImpl声明了userDao和loginLogDao两个属性,并提供了setXXX方法,这是为了通过Spring的配置文件完成DAO的注入。这里的两个属性和相应的setXXX方法都是Spring配置文件DAO注入值的接收器。此外,我们看不到任何的事物操作的代码,这是因为Spring让程序员从事务操作单调机械的代码中解脱出来,专注完成必不可少的工作。其他的由Spring容器来完成。通过Spring声明式事务配置即可以让业务类享受EJB声明式事务的优点。

接下来我们在Spring中为业务类UserService实现类实现事务管理能力和配置声明式事务。

3、Spring的事务管理和声明式事务配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans default-autowire="no">
	<!-- 事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource">
		</property>
	</bean>

	<bean id="userServiceTarget"
		class="com.service.UserServiceImpl">
		<property name="userDao" ref="userDao" />
		<property name="loginLogDao" ref="loginLogDao"></property>
	</bean>
	<!-- 声明性事务 -->
	<bean id="userService"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager" ref="transactionManager" />
		<property name="target" ref="userServiceTarget" />
		<property name="transactionAttributes">
			<props>
				<prop key="findUserByUserName">
					PROPAGATION_REQUIRED,readOnly
				</prop>
				<prop key="hasMatchUser">
					PROPAGATION_REQUIRED,readOnly
				</prop>
				<prop key="loginSuccess">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>
</beans>

 在上面的配置文件中,作了以下几方面的配置:1是定义了一个基于数据源的DataSourceTransactionManager事务管理器,该事务管理器负责声明式事务管理,该管理器需要设置dataSource属性。在这个配置文件中没有定义,但已经在上一个博客(Spring的DAO装载)的配置中定义,在后面将讲述怎样将两个或多个配置文件在运行期整合在一起。所以这里就不进行配置,而是直接使用已经配置好的相应的BEAN ID。2是定义了业务类具体实现Bean。该类中有两个DAO属性,在这里进行属性的值的注入。3配置声明式事务。声明式事务可以配置3个属性:transactionManager(对目标类的方法进行事务管理)、target(需要代理的目标业务类)和transactionAttributes(定义目标业务类中的那些方法需要事务的支持)。在transactionAttributes中定义方法的事务控制属性。这里介绍几个常用的事务控制属性(事务传播类型):PROPAGATION_REQUIRED--较常用,表示业务方法在当前线程中查看是否有事务支持,有就利用这个事务,否则创建一个新的事务。readOnly——表示事务是只读事务,可以提高运行效率。

此外,在配置transactionAttributes中的方法名时,可以使用"*"通配符。

4、Spring配置文件的整合

我么可以在web.xml中进行配置来再Web容器启动时自动启动Spring容器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:dao.xml,classpath:service.xml</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

  <!-- 使用自动启动的Servlet进行初始化 -->	
  <!-- servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet-->
	<servlet>
		<servlet-name>myweb</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>3</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>myweb</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
 
</web-app>


从上面的配置中我们可以看出:1是spring配置文件的整合是在<context-param>  <param-value>classpath:dao.xml,classpath:service.xml</param-value>
</context-param>中用classpath:配置文件名表示一个配置文件,并用逗号分隔多个配置文件的方式来进行多个配置文件的整合,然后用一个Listener来监听这些配置。2是同Struts一样,加载一个Servlet来引入Spring。

1
1
分享到:
评论

相关推荐

    Spring.3.x企业应用开发实战(完整版).part2

    2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 ...

    Spring中文帮助文档

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

    Spring3.x企业应用开发实战(完整版) part1

    2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 ...

    spring in action英文版

     4.4 用Spring整合Hibernate  4.4.1 Hibernate概览  4.4.2 管理Hibernate资源  4.4.3 用HibernateTemplate访问Hibernate  4.4.4 HibernateDaoSupport的子类  4.5 Spring和JDO  4.5.1 配置JDO ...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    java web技术开发大全(最全最新)

    2.2.3 JavaWeb程序的配置文件 2.3 MVC模式与MvC框架 2.3.1 JSP模型1和JSP模型2 2.3.2 Web应用程序需要的基础服务 2.3.3 MVC模式概述 2.3.4 常用的MvC框架 2.4 小结 第3章 Web开发中的客户端技术 3.1 ...

    JAVA程序开发大全---上半部分

    9.2.5 使用Hibernate配置文件编辑器 141 9.2.6 使用反向工程生成持久化对象、映射文件和DAO类 143 9.2.7 使用Hibernate功能 151 9.3 MyEclipse中Hibernate框架的高级操作 152 9.3.1 在Hibernate反向工程中定制映射...

    java web开发技术大全

    2.2.3 JavaWeb程序的配置文件 2.3 MVC模式与MvC框架 2.3.1 JSP模型1和JSP模型2 2.3.2 Web应用程序需要的基础服务 2.3.3 MVC模式概述 2.3.4 常用的MvC框架 2.4 小结 第3章 Web开发中的客户端技术...

    spring学习笔记

    Spring 的配置文件:..........................................................................................................7 1.3.4 在配置中配置类:........................................................

Global site tag (gtag.js) - Google Analytics