下面通过一个简单的实例来了解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。
分享到:
相关推荐
在SSM框架中,Spring作为容器,负责管理和装配应用中的Bean,通过XML配置文件或注解进行配置。此外,Spring MVC作为Spring的一部分,提供了模型-视图-控制器(MVC)设计模式的实现,用于处理HTTP请求和响应。 2. ...
在SSM整合中,SpringMVC和MyBatis之间的集成也需要配置。这通常涉及到Spring的SqlSessionFactoryBean,它创建MyBatis的SqlSessionFactory,而MapperScannerConfigurer则用于扫描项目中的Mapper接口,使得Spring可以...
在实际开发中,开发者需要编写服务接口和服务实现,然后在Spring配置文件中声明这些服务,并指定服务的地址。同时,可能还需要自定义拦截器来处理特定的业务逻辑或实现安全性需求。一旦配置完成,MyEclipse可以快速...
1. **Spring配置文件**:如`applicationContext.xml`,用于配置Spring的Bean。 2. **SpringMVC配置文件**:如`servlet-context.xml`,配置DispatcherServlet、视图解析器、处理器映射器等。 3. **MyBatis配置文件**...
- **配置CXF客户端**:在Spring配置文件中,我们需要声明CXF的`JaxWsProxyFactoryBean`,设置其服务地址和服务接口。例如: ```xml <property name="serviceClass" value="com.example.UserService"/> ...
例如,我们可以在XML配置文件中定义Bean的定义,或者使用注解来简化配置,如@Service、@Repository和@Controller等。 Spring JDBC是Spring框架的一部分,它提供了一个更高级别的JDBC抽象层,简化了数据库操作。通过...
2. **applicationContext.txt**:这是Spring的上下文配置文件,它定义了Spring容器如何管理和装配Bean。在SSM整合中,通常会在这里配置数据源、事务管理器、DAO层和Service层的Bean。例如,使用`<bean>`标签定义Bean...
在Spring配置文件中,通过`<bean>`标签定义一个Bean,设置其类名、属性等。例如: ```xml ``` 4. **自动装配** Spring提供了一些自动装配的方式,如`byName`和`byType`,也可以通过`@Autowired`注解实现...
通过在 `ApplicationContext.xml` 配置文件中定义一个 bean,我们可以将数据库连接信息(如数据源 `dataSource`)和 Hibernate 相关属性(如方言 `dialect`)注入到 SessionFactory 中。以下是一个示例配置: ```...
1. 配置Spring:创建Spring配置文件,定义Bean并进行依赖注入,包括数据源、SessionFactory、事务管理器等。 2. 集成Hibernate:在Spring配置中声明Hibernate的SessionFactory Bean,配置Hibernate的相关属性,如...
同时,还需要在Spring的配置文件(如`applicationContext.xml`)中声明SqlSessionFactoryBean和SqlSessionTemplate,将它们与iBatis的配置文件关联起来。 3. **Mapper接口**:iBatis支持基于接口的映射,开发者可以...
Spring作为依赖注入(DI)和面向切面编程(AOP)的核心容器,其配置文件主要负责管理Bean的定义和装配。在`spring.xml`中,我们可以看到如下的配置元素: 1. `<bean>`:定义一个Java对象,即Bean。包括Bean的ID、...
在Java开发中,整合框架配置文件是至关重要的一步,它涉及到多个组件的协同工作,以实现应用程序的功能。这里我们主要探讨的是如何有效地管理和配置Java框架,以提高开发效率和应用性能。 首先,让我们来理解“整合...
在全注解开发中,我们可以使用@Autowired来自动装配bean,@Transactional来声明事务边界,@Service和@Repository则分别用于标记服务层和数据访问层的bean。 Hibernate是一个流行的Java ORM(对象关系映射)框架,它...
1. **配置Spring**:首先,在Spring配置文件中定义Bean,包括Struts2的Action类和DWR的接口实现类。使用Spring的`<bean>`标签声明这些类,并设置相应的属性,如Service类和DAO类。 2. **配置Struts2**:在Struts2的...
通过以上步骤,我们就成功地实现了Spring与MyBatis的XML配置文件整合。这种方式使得开发更加便捷,代码结构更加清晰,同时也提高了系统的可维护性和扩展性。在实际开发中,还可以结合Spring Boot等现代框架,进一步...
5. **CXF_Spring_Server**:这个文件夹可能包含服务器端的应用配置和实现,包括Spring配置文件、服务接口和实现类,以及部署到应用服务器的WAR或EAR文件。 6. **CXF_Spring_Client**:这个文件夹可能包含了客户端的...
在整合Spring和Struts2时,我们需要创建一个Spring配置文件(如`spring-context.xml`),在这个文件中定义bean,包括业务逻辑层(Service)和数据访问层(DAO)的bean。 接着,Struts2的配置主要集中在`struts-...
- 配置注解,例如使用XML配置文件中的"context:component-scan"指定自动扫描的包路径,自动发现并注册Bean。 @Autowired与@Resource的区别: - @Autowired是Spring提供的注解,它通过类型匹配找到对应的Bean并自动...
在传统的Struts、Spring和Hibernate整合中,大量的XML配置文件是必不可少的,包括struts.xml、spring-context.xml、hibernate.cfg.xml等。然而,随着Java注解的发展,许多配置可以通过在类或方法上添加注解来完成,...