对spring的集成
1,spring和jdbc的组合开发
使用Spring+JDBC集成步骤如下:
//首先配置数据源
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
.....//以下是连接池的配置
</bean>
//配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间。事务的配置方式有两种:注解方式和基于XML配置方式。采用注解方式:
<bean id="txManager
" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource
" ref="dataSource"/>
</bean>
<!-- 采用@transactional注解方式使用事务 -->
<tx:annotation-driven transaction-manager="txManager
"/>
有些人喜好把数据源的配置信息放在属性文件中,spring提供了获取属性文件内容来配置数据源的方法。
把上面的数据源的配置一一写进属性文件(如:jdbc.properties)中,修改xml配置文件关于数据源的配置部分;
<context:property-placeholder location="jdbc.properties">
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="$(driverClassName)"
/>
<property name="url" value="$(url)"/>
<property name="username" value="$(username)"/>
<property name="password" value="$(password)"/>
.....//以下是连接池的配置
</bean>
在程序中可以使用JdbcTemplate,更好的进行对数据库的操作。
示例:使用JdbcTemplate获取一条记录
@Service @Transactional
public class PersonServiceBean implements PersonService{
private JdbcTemplate jdbcTemplate;
@Resource
public void setDataSource(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public Person getPerson(Integer id){
RowMapper rowMapper
= new RowMapper(){
public Object mapRow(ResultSet rs,int rowNum)throws SQLException{
Person person = new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
return person;
}
};
}
return (Person)jdbcTemplate.queryForObject
("select * from person where id=?",new Object[]{id},new int[]{java.sql.Types.INTEGER},rowMapper
);
}
2,spring2.5和hibernate3.3,struts1.3的整合开发
需要引入的jar包:
hibernate核心安装包下的:
hibernate3.jar
lib\required\*.jar
lib\optional\ehcache-1.2.3.jar
hibernate注解安装包下:
lib\test\slf4j-log4j12.jar
spring安装包下的:
dist\spring.jar
dist\modules\spring-webmvc-struts.jar
lib\jakarta-commons\commons-logging.jar,commons-dbcp.jar,commons-pool.jar
lib\aspectj\aspectjweaver.jar,aspectjrt.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\log4j\log4j-1.2.15.jar
struts
下载struts-1.3.8-lib.zip,需要使用到解压目录下的所有jar,建议把jstl-1.0.2.jar和standard-1.0.2.jar更换为1.1版本。Spring中已经存在一个antlr-2.7.6.jar,所以struts中的antlr-2.7.2.jar删除,避免jar冲突。
数据库驱动jar
spring配置文件:
上面的数据源配置不变,hibernate把sessionFacotory交由spring容器管理,所以要在配置文件中指定sessionFacotory的信息。
示例:
//首先配置数据源
<bean id="dataSource
" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
.....//以下是连接池的配置
</bean>
//hibernate的sessionFacotory的配置
<bean id="sessionFactory
" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource
" ref="dataSource
"/>
<property name="mappingResources
">
<list>
<value>cn/jianchen/bean/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProerties
">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2dll.auto=update
hibernate.show_sql=true
hibernate.format_sql=false
//以下是对二级缓存的配置
hibernate.cache.use_second_level_cache=true //是否启用二级缓存
hibernate.cache.use_query_cache=false //是否使用查询缓存,因为查询的命中率不高,一般设为false
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider//指明缓存方案的提供者
</value>
</property>
</bean>
//配置事务。
<bean id="txManager
" class="org.springframework.orm.hibernate3.HibernateTransactionManager
">
<property name="sessionFactory" ref="sessionFactory
"/>
</bean>
//开启注解
<tx:annotation-driven transaction-manager="txManager
"/>
示例代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.jianchen.service.impl;
import cn.jianchen.bean.Person;
import cn.jianchen.service.PersonService;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Service;
@Service("personservicebean")
public class PersonServiceBean implements PersonService {
@Resource private SessionFactory sessionFactory; //使用注解的依赖注入
public void save(Person person){
sessionFactory.getCurrentSession().persist(person); //调用的sessionFacotory的getCurrentSession方法返回受spring容器管理的session对象,该session 具有事务管理能力。如果调用openSession方法,返回的session不具备事务能力。
}
public void update(Person person){
sessionFactory.getCurrentSession().merge(person); //调用update方法,是因为传进来的对象一般为脱管对象。否则受session管理的对象根本不需要调用update。使用merge后,传进来的对象仍是脱管对象。如果使用update对象就成为持久对象了。可以参照前面的hibernate讲解部分。
}
public void delete(int personid){
sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().load(Person.class, personid));//删除的是对象,所以可以根据传进来的id先获得对象,使用load方法,懒加载性能更优。
}
public List getPersons(){
String hql ="from Person";
List list = sessionFactory.getCurrentSession().createQuery(hql).list();
return list;
}
}
前面是spring和hibernate的整合,现在再把struts
整合进来。
在web容器中实例化spring容器:
web.xml文件部分配置:
指定spring的配置文件
,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>class:
beans.xml</param-value>
</context-param>
对spring容器进行实例化
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
分析:实例化的spring容器会放在ServletContexth中*(作为它的一个属性),也就是说从Application中可以获得该spring容器实例,进而使用spring的功能。
spring给我们提供了一个类,让我们从application范围中获得spring容器实例。示例代码:
如果action没有交给spring容器管理,我们通过下面语句获取spring容器实例
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());
在struts配置文件中添加进spring的请求控制器
,该请求控制器会先根据action的path属性值到spring容器中寻找跟该属性值同名的bean。如果寻找到即使用该bean处理用户请求。配置如下:
<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor
">
</controller>
把action交给spring管理后,我们可以使用依赖注入在action中注入业务层的bean。确保action的path属性于bean的名称相同。
如:
<action path="/person/list
"...>
</action>
Spring配置:
<bean name="/person/list
" class="cn.jianchen.web.action.PersonAction"/>
示意图如下:
分析:根据请求的路径,获取.do的前面部分,作为action的名称。交由请求处理器到spring容器中寻找受管理的相同名字的Action bean。找到后调用该action处理请求。
- 大小: 23.6 KB
分享到:
相关推荐
### 学习笔记:尚硅谷Spring6基础篇 #### 一、Spring框架概述 ##### 1.1 Spring是什么? Spring是一款主流的Java EE轻量级开源框架,由“Spring之父”Rod Johnson提出并创立。Spring的主要目标是简化Java企业级...
在本篇【SpringCloud学习第一天,helloWorld】的教程中,我们将初步接触并了解Spring Cloud这一微服务框架,以及如何创建一个基本的“Hello, World”应用。首先,我们需要理解Spring Cloud的核心概念和作用。 ...
Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转bean scope,避免跳坑里!Spring系列第7篇:依赖注入之手动注入Spring系列第8篇:自动注入...
在本篇【jee、spring、spring mvc、mybatis 学习(五)】中,我们将深入探讨四个关键的Java企业级开发技术:Java EE(Java Enterprise Edition)、Spring框架、Spring MVC以及MyBatis。这些技术是现代Java Web应用...
本入门篇将介绍Spring Security的基础知识,包括其核心概念、配置以及如何在实际项目中使用。 1. **核心概念** - **Authentication(认证)**: 用户身份验证是Spring Security的基础,它确认用户的身份是否合法。...
"3、HelloSpring.md"通常作为Spring入门的第一个示例,展示了如何创建一个简单的Spring应用,帮助初学者快速上手。 综上所述,Spring5的学习涵盖了从基础到高级的各种主题,包括依赖注入、面向切面编程、事务管理、...
使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...
在本篇中,我们将探索如何创建并运行你的第一个 Spring Boot 应用程序。 1. **快速入门:创建项目** 要开始一个 Spring Boot 项目,你可以使用 Spring Initializr(https://start.spring.io/)。这是一个在线工具...
4. **JDBC 支持**:Spring 提供了一个简单的 JDBC 抽象层,减少了直接使用 JDBC 的繁琐,同时支持与第三方持久层框架(如 Hibernate、JPA)的集成。 5. **Java EE 整合**:Spring 可以很好地与 Java EE 技术(如 ...
总的来说,这个“spring-boot spring-security-oauth2 完整demo”为学习和实践Spring Boot、Spring Security与OAuth2的结合提供了宝贵的参考。通过深入理解和实践这个示例,开发者不仅可以掌握这三大框架的基本用法...
【标题】"Spring Web Service 实战篇(1)" 指的是使用Spring框架构建Web服务的实际操作教程。在这个部分,我们将深入探讨如何利用Spring的强大功能来设计和实现基于Web的服务,以便于不同系统间的交互和数据共享。 ...
**Spring Roo 简介,第 4 部分: 用 Spring Roo 和 Cloud Foundry 在云中快速开发应用程序** 在本篇文章中,我们将深入探讨 Spring Roo 的使用,以及如何结合 Cloud Foundry 进行云端应用开发。Spring Roo 是一个...
总的来说,学习Spring应从其核心概念、配置文件解析、IoC和AOP机制、MVC框架等方面入手,同时关注Spring与其他技术如JDBC、MyBatis、Hibernate的集成,以及Spring Boot和Spring Cloud等高级话题,以便全面掌握Spring...
6. **构建任务**:Gradle的任务系统是其强大之处,例如,`bootRun`任务用于运行Spring Boot应用,`assemble`任务用于打包项目,`installDist`任务则可以将应用安装到本地仓库,方便后续的运行。 7. **源码组织**:...
本篇文章主要讲解了 Spring 框架的第二天学习资料,涵盖了 FactoryBean、Spring 工厂配置文件的参数化、静态代理、AOP 开发等知识点。 一、FactoryBean FactoryBean 是 Spring 框架中的一种机制,用于创建复杂对象...
使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...
Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在...尽管现代框架如Spring Boot已逐渐取代这种传统的整合方式,但对于理解企业级开发的底层机制,这种经典组合仍然具有很高的学习价值。
这篇文档将深入探讨Spring Security的核心概念、配置以及它在实际应用中的使用。 首先,Spring Security提供了一套全面的安全解决方案,包括用户认证、授权、会话管理以及CSRF(跨站请求伪造)防护等。它通过拦截...
使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...
本篇文章将详细探讨Spring框架的源代码及其下载过程,帮助开发者更好地理解和学习Spring。 首先,Spring源代码的下载对于深入理解其工作原理、自定义扩展或排查问题至关重要。在描述中提到的"Spring源代码的下载...