`
jianchen
  • 浏览: 344929 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring学习之第四篇

阅读更多

对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&amp;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&amp;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基础篇

    ### 学习笔记:尚硅谷Spring6基础篇 #### 一、Spring框架概述 ##### 1.1 Spring是什么? Spring是一款主流的Java EE轻量级开源框架,由“Spring之父”Rod Johnson提出并创立。Spring的主要目标是简化Java企业级...

    SpringCloud学习第一天,helloWorld

    在本篇【SpringCloud学习第一天,helloWorld】的教程中,我们将初步接触并了解Spring Cloud这一微服务框架,以及如何创建一个基本的“Hello, World”应用。首先,我们需要理解Spring Cloud的核心概念和作用。 ...

    JAVA spring 系列案例50个和学习资料

    Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转bean scope,避免跳坑里!Spring系列第7篇:依赖注入之手动注入Spring系列第8篇:自动注入...

    jee、spring、spring mvc、mybatis 学习(五)

    在本篇【jee、spring、spring mvc、mybatis 学习(五)】中,我们将深入探讨四个关键的Java企业级开发技术:Java EE(Java Enterprise Edition)、Spring框架、Spring MVC以及MyBatis。这些技术是现代Java Web应用...

    spring-security3 入门篇

    本入门篇将介绍Spring Security的基础知识,包括其核心概念、配置以及如何在实际项目中使用。 1. **核心概念** - **Authentication(认证)**: 用户身份验证是Spring Security的基础,它确认用户的身份是否合法。...

    spring5学习笔记

    "3、HelloSpring.md"通常作为Spring入门的第一个示例,展示了如何创建一个简单的Spring应用,帮助初学者快速上手。 综上所述,Spring5的学习涵盖了从基础到高级的各种主题,包括依赖注入、面向切面编程、事务管理、...

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    Spring Boot 初探 | 第一篇:第一个Spring Boot程序(示例程序)

    在本篇中,我们将探索如何创建并运行你的第一个 Spring Boot 应用程序。 1. **快速入门:创建项目** 要开始一个 Spring Boot 项目,你可以使用 Spring Initializr(https://start.spring.io/)。这是一个在线工具...

    咕泡学院_Tom_JavaVIP课程_深入分析Spring源码(第一阶段)1

    4. **JDBC 支持**:Spring 提供了一个简单的 JDBC 抽象层,减少了直接使用 JDBC 的繁琐,同时支持与第三方持久层框架(如 Hibernate、JPA)的集成。 5. **Java EE 整合**:Spring 可以很好地与 Java EE 技术(如 ...

    spring-boot spring-security-oauth2 完整demo

    总的来说,这个“spring-boot spring-security-oauth2 完整demo”为学习和实践Spring Boot、Spring Security与OAuth2的结合提供了宝贵的参考。通过深入理解和实践这个示例,开发者不仅可以掌握这三大框架的基本用法...

    Spring Web Service 实战篇(1)

    【标题】"Spring Web Service 实战篇(1)" 指的是使用Spring框架构建Web服务的实际操作教程。在这个部分,我们将深入探讨如何利用Spring的强大功能来设计和实现基于Web的服务,以便于不同系统间的交互和数据共享。 ...

    Spring Roo 简介,第 4 部分: 用 Spring Roo 和 Cloud Foundry 在云中快速开发应用程序

    **Spring Roo 简介,第 4 部分: 用 Spring Roo 和 Cloud Foundry 在云中快速开发应用程序** 在本篇文章中,我们将深入探讨 Spring Roo 的使用,以及如何结合 Cloud Foundry 进行云端应用开发。Spring Roo 是一个...

    spring中所需要的知识点及学习方向文档

    总的来说,学习Spring应从其核心概念、配置文件解析、IoC和AOP机制、MVC框架等方面入手,同时关注Spring与其他技术如JDBC、MyBatis、Hibernate的集成,以及Spring Boot和Spring Cloud等高级话题,以便全面掌握Spring...

    使用Gradle 构建spring Boot工程系列项目源码(配合第五篇文章)

    6. **构建任务**:Gradle的任务系统是其强大之处,例如,`bootRun`任务用于运行Spring Boot应用,`assemble`任务用于打包项目,`installDist`任务则可以将应用安装到本地仓库,方便后续的运行。 7. **源码组织**:...

    Spring框架是在2003年兴起的一门轻量级的JAVAEE框架技术 Spring框架学习资料第二天

    本篇文章主要讲解了 Spring 框架的第二天学习资料,涵盖了 FactoryBean、Spring 工厂配置文件的参数化、静态代理、AOP 开发等知识点。 一、FactoryBean FactoryBean 是 Spring 框架中的一种机制,用于创建复杂对象...

    《精通Spring2.X企业应用开发详解》16-19章

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在...尽管现代框架如Spring Boot已逐渐取代这种传统的整合方式,但对于理解企业级开发的底层机制,这种经典组合仍然具有很高的学习价值。

    spring security两篇文档

    这篇文档将深入探讨Spring Security的核心概念、配置以及它在实际应用中的使用。 首先,Spring Security提供了一套全面的安全解决方案,包括用户认证、授权、会话管理以及CSRF(跨站请求伪造)防护等。它通过拦截...

    《精通Spring2.X企业应用开发详解》20-23

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    spring源代码下载地址

    本篇文章将详细探讨Spring框架的源代码及其下载过程,帮助开发者更好地理解和学习Spring。 首先,Spring源代码的下载对于深入理解其工作原理、自定义扩展或排查问题至关重要。在描述中提到的"Spring源代码的下载...

Global site tag (gtag.js) - Google Analytics