关于spring中提供的一些工具类和监听介绍

一、spring提供了一个HibernateTemplate类

①HibernateTemplate类:

用于操作PO对象,类似Hibernate Session对象。这个是整合的一个小变化,底层用的还是session但是他将读取配置文件的事情交给了这个类;来操作

这个类里面的方法和session里面的方法十分相似,所以整合时我们常常会使用这个类!

  1. public class UserDaoImpl implements UserDao {
  2.  
  3. //需要spring注入模板
  4. private HibernateTemplate hibernateTemplate;
  5. public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
  6. this.hibernateTemplate = hibernateTemplate;
  7. }
  8.  
  9. @Override
  10. public void save(User user) {
  11. this.hibernateTemplate.save(user);
  12. }
  13.  
  14. }

②HibernateDaoSupport类

HibernateDaoSupport类是用来简化上面的操作,上面的HibernateTemplate这个类的实例需要我们手动去spring中注入。而HibernateDaoSupport类中已经包含了创建HibernateTemplate的代码,我们只需要继承这个类然后只需要去注入SessionFactory即可

  1. <!-- 3 dao -->
  2. <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
  3. <property name="sessionFactory" ref="sessionFactory"></property>
  4. </bean>

③如果删除hibernate.cfg.xml配置文件怎么去配置hibernate所需要的东西

  在spring中有相应的配置来配置hibernate所需要的东西。如下代码,我们使用特殊的LocalSessionFactoryBean来创建特殊的bean,使用这个类我们创建出SessionFactory

然后在SessionFactory里面配置我们hibernate中所需要的配置!

  1. <!-- 1.3配置 LocalSessionFactoryBean,获得SessionFactory
  2. * configLocation确定配置文件位置
  3. <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
  4. 1)dataSource 数据源
  5. 2)hibernateProperties hibernate其他配置项
  6. 3) 导入映射文件
  7. mappingLocations ,确定映射文件位置,需要“classpath:” ,支持通配符 【】
  8. <property name="mappingLocations" value="classpath:com/itheima/domain/User.hbm.xml"></property>
  9. <property name="mappingLocations" value="classpath:com/itheima/domain/*.hbm.xml"></property>
  10. mappingResources ,加载执行映射文件,从src下开始 。不支持通配符*
  11. <property name="mappingResources" value="com/itheima/domain/User.hbm.xml"></property>
  12. mappingDirectoryLocations ,加载指定目录下的,所有配置文件
  13. <property name="mappingDirectoryLocations" value="classpath:com/itheima/domain/"></property>
  14. mappingJarLocations , 从jar包中获得映射文件
  15. -->
  16. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  17. <property name="dataSource" ref="dataSource"></property>
  18. <property name="hibernateProperties">
  19. <props>
  20. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
  21. <prop key="hibernate.show_sql">true</prop>
  22. <prop key="hibernate.format_sql">true</prop>
  23. <prop key="hibernate.hbm2ddl.auto">update</prop>
  24. <prop key="hibernate.current_session_context_class">thread</prop>
  25. </props>
  26. </property>
  27. <property name="mappingLocations" value="classpath:com/itheima/domain/*.hbm.xml"></property>
  28. </bean>

二、spring中关于struts的整合

整合struts只有两种方式:

①在spring中使用IOC来给Action动作类中注入UserService的实例

  1. <!-- 6 配置action -->
  2. <bean id="userAction" class="com.itheima.web.action.UserAction" scope="prototype">
  3. <property name="userService" ref="userService"></property>
  4. </bean>

然后对应着struts.xml配置中指定动作类

  1. <struts>
  2. <!-- 开发模式 -->
  3. <constant name="struts.devMode" value="true" />
  4.  
  5. <package name="default" namespace="/" extends="struts-default">
  6. <!-- 底层自动从spring容器中通过名称获得内容, getBean("userAction") -->
  7. <action name="userAction_*" class="userAction" method="{1}">
  8. <result name="success">/messag.jsp</result>
  9. </action>
  10. </package>

②我们不在spring中注入UserService的实例。(那问题来了,谁给我们创建UserService的实例,不实例化则不能使用其对象方法)

如图可看见struts.xml还是按照正常的方式编写

  1. <package name="default" namespace="/" extends="struts-default">
  2. <!-- 底层自动从spring容器中通过名称获得内容, getBean("userAction") -->
  3. <action name="userAction_*" class="com.itheima.web.action.UserAction" method="{1}">
  4. <result name="success">/messag.jsp</result>

那么谁给注入UserService的实例呢?

分析:

1. struts 配置文件

default.properties  ,常量配置文件

struts-default.xml ,默认核心配置文件

struts-plugins.xml ,插件配置文件

struts.xml,自定义核心配置文件

常量的使用,后面配置项,将覆盖前面的。

2.default.properties  ,此配置文件中确定 按照【名称】自动注入

/org/apache/struts2/default.properties

3.当整合struts-plugins.xml ,struts整合spring

<constant name="struts.objectFactory" value="spring" />

struts的action将由spring创建

但前提是:Action类中,必须提供service名称与 spring配置文件一致。(如果名称一样,将自动注入)

总结,之后action有spring创建,并按照名称自动注入

三、如何使spring整合到web项目中

当项目创建时我们想要它在请求前加载完成spring的配置文件

又想要在项目之后创建,则我们可以想到配置web.xml

spring提供了一个监听器ContextLoaderListener上下问加载监听器,当服务器启动时会加载web.xml则这个监听也将会被加载,但是这个监听默认指向的是WEB-INF下所以我们还需要配置指定路径classpath:applicationContext.xml,这样当服务启动后就会加载spring的配置文件

web.xml配置

  1. <!-- 1 确定spring xml位置 -->
  2. <context-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <param-value>classpath:applicationContext.xml</param-value>
  5. </context-param>
  6. <!-- 2 spring监听器 -->
  7. <listener>
  8. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  9. </listener>
  10. <!-- 3 struts 前端控制器 -->
  11. <filter>
  12. <filter-name>struts2</filter-name>
  13. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  14. </filter>
  15. <filter-mapping>
  16. <filter-name>struts2</filter-name>
  17. <url-pattern>/*</url-pattern>
  18. </filter-mapping>

关于整合ssh中的细节03的更多相关文章

  1. 【转】SSH中 整合spring和proxool 连接池

    [摘要:比来做的一个项目中应用到了毗邻池技巧,大概我们人人比拟认识的开源毗邻池有dbcp,c3p0,proxool.对那三种毗邻池来讲,从机能战失足率来讲,proxool轻微比前两种好些.本日我首要简 ...

  2. .net到Java那些事儿--整合SSH

    一.介绍       整体介绍分成两个部分,第一.net转到Java的原因,第二开发SSH时候的环境介绍:       .net到Java的原因: .net开发也将近快3年的样子,加上现在的老东家换过 ...

  3. Maven02——回顾、整合ssh框架、分模块开发、私服

    1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...

  4. MAVEN_day03 整合SSH框架

    一.整合SSH工程环境准备 1.创建MAVEN工程>>添加>>"web.xml"文件解决工程红色叹号. new Maven Project>>在 ...

  5. maven整合ssh框架笔记

    具体工程会上传文件sshpro <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:x ...

  6. Maven项目整合SSH框架

    ---------------------siwuxie095                                         Maven 项目整合 SSH 框架         创建 ...

  7. Struts2,Spring3,Hibernate4整合--SSH框架

    Struts2,Spring3,Hibernate4整合--SSH框架(学习中) 一.包的导入 1.Spring包 2.Hibernate 包 3.struts 包 (还欠 struts2-sprin ...

  8. Maven 整合SSH框架

    1. 传递依赖冲突 1.1 传递依赖:A(项目)依赖B,B依赖C(1.1版本),B是A的直接依赖,C是A的传递依赖; A(项目)又依赖D,D依赖C(1.2版本),此时,C有两个版本,产生冲突; 1.2 ...

  9. 调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type

    调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type 解决方法1: 原因是Spring中的cglib-nodep-2.x.x.jar与Hibernate中 ...

随机推荐

  1. 对CAN signal 的一点理解

      首先每个 ECU是一个网络节点,每个网络节点可收发一些 Message,每个Message 由CAN signals构成.每个 CAN signal利用一个或多个连续的2进制位来表示承载的信息.下 ...

  2. Pch文件预编译

    因为项目用到Pch文件链接宏变量,因而稍作研究怎样使用,define宏变量其实并不合适 ,static const才最适合 Pch文件听说是上古世纪存在的文件,主要是用来全局预编译文件统一在一个出口, ...

  3. 基于Travis CI实现 Gitbook在 Github 和 Coding 的同步部署

    前言 最近发现自己的博客在使用vpn的情况下打开很慢,百度站点也抓取失败,于是将自己的博客借助hexo-deploy 插件很容易同步部署到了coding上.只需要在你的hexo配置文件_config. ...

  4. centos的安装与配置,Linux下基本命令、权限控制,解压缩文件以及软件的安装与卸载

    centos安装与网络配置 关机:shutdown -h now 重启:shutdown -r now 或 reboot linux目录结构与操作命令 使用ls命令查看目录结构 目录查看: ls [- ...

  5. GCD相关

    板子: ? gcd(b, a % b) : a; } POJ1930 题意:给你一个无限循环小数,给到小数点后 9 位,要求这个数的分数形式. 解法: 要想解决这道题,首先应该了解如何将循环小数化为分 ...

  6. gRPC搭建使用方式

    gRpc 官网  链接 新建服务端项目 在服务端内先编写一个 .proto 文件 greet.proto syntax = "proto3"; service Greeter { ...

  7. 大数据才是未来,Oracle、SQL Server成昨日黄花?

    1. 引子**** 有人在某个专注SQL的公众号留言如下: 这个留言触碰到一个非常敏感的问题:搞关系型数据库还有前途吗?现在都2020年了,区块链正火热,AI人才已经"过剩",大数 ...

  8. 纪中17日T2 2322. capacitor

    2322. capacitor (File IO): input:capacitor.in output:capacitor.out 题目描述 输入 输出 样例输入 样例输出 数据范围限制 Solut ...

  9. 如何在CentOS上安装Tensorflow的gpu版本?

    系统配置 系统版本: Centos7.6 语言: Python3.5(anaconda3 4.2) 框架: Tensorflow 安装依赖 sudo yum install openjdk-8-jdk ...

  10. Android注册时验证码的生产方法

    今天主要是学习了注册时 的验证码的使用. 1.创建了验证码的生成类. 2.通过此生成类,与imageview相互联系起来,实现验证码显示.并添加点击事件,实现验证码的切换. 代码是现成的代码块可以套用 ...