Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用 本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。 阅读详情
 在上一章中详细分析了JAR包的选择,那么这次我将对例子中的一些必须的配置文件进行下说明。虽然这些配置在网上也很容易找到,但是很多都没有讲个因为所以出来,这样根本就得不到提高。在此,大象为各位详细分析一下这些内容。
    实例中涉及的配置文件有这么几个
    applicationContext.xml
    jdbc.properties
    log4j.properties
    struts.xml
    web.xml 
    我准备在本章中只讲applicationContext.xml、jdbc.properties和web.xml。log4j的配置大同小异而且也不在本文范围。至于struts.xml我准备留到后面与Action代码一起来讲,因为用的是struts2-convention-plugin插件来实现struts2的注解,所以这两个结合起来讲要好一些。

    第二部分:分析配置文件
    1、jdbc.properties
    本例采用MySQL数据库,所以我设置了一个属性文件,用来存放一些连接信息和Hibernate相关的设置。

    因为我们使用的是Hibernate来与数据库进行交互,把这些东西写在单独的文件里,是方便修改,如果你想换成SQL Server或是Oracle,只需要更改driver、url以及dialect,而且还可以自由控制sql语句的显示的开关,非常方便。至于写在这里怎么用呢?请接着看下面的applicationContext.xml说明。
    2、applicationContext.xml
    这个文件就是spring的主配置文件了,当然,本例也只有这么一个spring的配置文件,内容不多,但做的工作还是很多的,下面我给大家详细分析一下。

    我把这两部分放在一起是因为这两者是相互联系的,而且也比较好说明。可以这样来理解,PropertyPlaceholderConfigurer这个类就是读取jdbc. properties文件,并将它们设置到这个类的属性中。然后再将下面数据源配置中定义的这些${jdbc.driver}、${jdbc.url}字符串换成属性文件中相同名称的值。${}这种写法,是类里面方法解析用的,网上都说这是叫占位符,我看了源代码的,其实是把它们当成字符串截取前后的特殊字符,再根据里面定义的名称找属性文件中对应的值。所以这个类只能读取properties格式的文件,你如果还有其它需要加入的属性文件,可以在list之间加入,写在value标签里面。     

    根据base-package指定的路径,扫描其下所有包含注解的Bean,并自动注入。比如@Repository,@Service这些都是注解,前者表示持久层,后者表示业务层。这可是非常非常好的一个功能,是从Spring2.5开始加入的一个非常棒的特性。有了它,我们将不用再去写那繁琐的<bean id="" class="" />。本文的主旨就是全注解,就是为了告诉大家不用写配置文件(当然不是绝对不写)来怎样进行开发工作。关于这部分的具体情况,在后面代码章节中会详细讲解。

    这就是在Spring中定义Hibernate相关的配置,Spring已经集成了这部分功能。通过class里面定义的类名称我们很容易就能理解,这是使用注解的方式映射实体以及创建Hiberante SessionFactory。${hibernate.dialect}、${hibernate.show_sql}和上面的数据源配置获取方式一样,当applicationContext.xml定义好之后,就不用再对它进行修改,而是将修改对象变成了jdbc.properties文件。
    另外在Spring2.5.6版中,加入了一个很有用的小功能,就是packagesToScan属性,它是根据value中定义的路径来扫描其下所有的注解实体类。大象对这个路径做了多种测试,另外又看了源代码,发现它只能匹配某一类型的路径,而不是所有路径。比如上面的value值表示,扫描entity包下面的所有包中的注解类,如果你将类直接放在entity包下,那么服务器启动和程序运行时都不会报错,但是当你的代码需要用到这个类的时候,就会出现异常,提示你找不到实体。
     

    这是事务定义,而且是使用注解方式定义事务(@Transactional),proxy-target-class="true"表示采用动态代理类来管理事务,如果是false表示采用接口代理来管理事务(默认值为false)。什么意思呢?就是说对于需要加入事务处理的类,如果是实现接口,那么将采用Spring的默认事务管理(Spring默认方式为接口),如果不采用接口,而直接使用类,那么就需要cglib类库的支持,它通过动态的创建目标类(就是你需要加入事务的类)的子类,然后对这子类中的方法(当然是从目标类中继承来的)进行事务管理。这其实就是AOP切面,而且从中可以看出来,需要加入事务的方法不能为private、static、final 的方法。这样说也不是很严格,说它不能加入事务,是说它不能主动的启动一个事务,如果某个private方法是被某个public方法调用的,而public方法是可以被动态代理加入事务的,所以这个private方法也一样被加入了事务,只是它处在public方法的事务之中。但是static和final这两类方法因为不能被子类覆盖,所以无法加入事务。如果这两类型的方法不被其它的事务方法所调用,那么它们就会以无事务的方式运行,因此很容易造成隐患,这一点请大家特别注意。

    上面这个就是使用配置式来定义事务,两种方式的区别主要是,注解式只用写那么一句话,然后在业务类或方法中加入@Transactional这个注解标记,就完成事务声明,不过对于每个业务类都需要在类或方法中加入这些标记。而配置式声明,就是不用加这些标记,只要你的方法名称命名比较统一,就可以像上面这样定义事务规范,然后在aop标签中定义切入点与执行通知就行了。我感觉如果业务逻辑不是太复杂的情况,配置式会比较简单,而且修改起来也方便,这两种方式我都写出来了,至于用哪一种,由你们自己决定。
    3、web.xml
    现在使用的Servlet容器还是2.4版,因此web.xml里面还是需要写配置文件的,到了3.0版就可以采取注解的方式来实现了。

    Spring ApplicationContext配置文件的路径,可使用通配符,applicationContext*.xml表示所有以applicationContext开头的xml文件。多个路径用,号分隔。比如可以这样写:

    不过推荐采用通配符的写法,能够简单点,为什么还要弄那么复杂呢?
    context-param是在容器启动后最先被执行的,并且被放入到容器上下文中。在这里引入spring的配置文件,是供Spring的ContextLoaderListener监听器使用。而这个监听器中会有一个ContextLoade类用来获取这个配置文件中的信息。从而进行Spring容器的初始化工作。因为是采用注解的方式来进行开发,所以spring的配置文件其实只有一个,上面那个星号可以去掉。

    这个监听器就是为了读取Spring的配置文件,这在上面已经讲到了。

    这是Spring提供的一个用来防止内存泄漏的监听器。在我们使用struts2框架,或其它的某些类库时,因为它们自身的设计,会用到Introspector(内省)机制来获取Bean对象的信息。但不幸的是,这些框架或类库在分析完一个类之后却没有将它从内存中清除掉,内存中还保留有大量的静态资源,而这些东西又无法进行垃圾回收,因此产生了很严重的内存泄漏问题。直接表现为服务器的内存使用会随着时间而不断上升,最后的结果当然就是服务器当掉。所以在这里加入此监听器,能够帮助我们更好的处理内存资源回收的问题。

    这是Spring的编码过滤器,我们可以直接拿来用,相信这段配置应该很好理解,不过请大家注意forceEncoding这个参数,把它设置为true表示不管请求中的编码是什么格式,都将强制采用encoding中设置的编码方式。另外对于响应也将按照encoding指定的编码进行设置。另外不建议将编码设置成gb2312或是gbk格式,请采用基于Unicode的UTF-8编码。

    这个过滤器是个好东西,有了它,我们在使用Hibernate延迟加载的时候,就不会再为因Session被关闭,导致延迟加载数据异常而头痛了。网上有很多人说这个不好,其实在使用中,效果还是不错的。

    首先我要说这个过滤器的名字很雷,不知道写这类的家伙是不是个变态,或者喜欢恶搞。主要原因就是,这个过滤器的功能是推迟清理值栈中的值,以便在web层中进行访问,另外就是为了配合SiteMesh装饰器进行工作(官方中的说明)。如果不加这个,那么Struts2的默认过滤器就会清空值栈中的值,这样就会导致异常。所以说这类的名字和功能完全不搭边,很容易让人产生误解。

    在2.1.6版本里面,已经用这个过滤器取代了以前的FilterDispatcher,而且在api文档中已经标注为@deprecated(不赞成),并说明是从Struts 2.1.3版开始就弃用这个过滤器了,改用StrutsPrepareAndExecuteFilter,除此之外,还可以选择StrutsPrepareFilter和StrutsExecuteFilter。不过大象建议大家还是选择StrutsPrepareAndExecuteFilter吧,这也是官方推荐的。
    web.xml里面的几个重要的配置就这些,不过不要忘了,给这些filter加上filter-mapping映射。还有一点,请注意这些过滤器的顺序,这个顺序是很重要的,程序运行时,是根据这些filter-mapping的排列顺序依次执行过滤操作的。如果不想出现莫名其妙的错误,请控制好这些过滤器映射的顺序。
    我会在最后一章附上源码,大家就这样慢慢看吧。看到最后一章的时候,可能这些相关的知识就比较清楚了。到时再对照源码练习下,应该会有一些收获。恩,这部分就到此结束了,我们下次继续。
    
本文为菠萝大象原创,如要转载请注明出处。
2023年全国职业院校技能大赛“信息安全管理与评估”-真题——赛题题目+答案解析 阅读详情

相关推荐

ESP8266 进行HDLC解码,AX.25,APRS

/************************************************************** 函数名:aprs_wait_begin() 参 数:无 返回值:bool true=得到合法脉冲,false=未得到 说 明:等待第1个833us高脉冲,判断范围 730-930,其他忽略 ***************************************************************/ bool aprs_wait_begin(){ stati

蓝蓝的博客 1634

Struts2问题总结

Eclipse下struts2.5环境搭建与struts2.3的区别 在struts2.3中,需要导入导入了9个常用jar包。 (1)struts2-core-2.x.x.jar :Struts 2框架的核心类库 (2)xwork-core-2.x.x.jar :XWork类库,Struts 2在其上构建 (3)ognl-3.x.x.jar :对象图导航语言(Object Gr...

devil_bye的博客 882

视频生成工具本地部署完全指南:Seedance能装吗?有哪些开源替代?

本文系统介绍了视频生成模型的本地部署方案,分为三个部分:1)Seedance 2.0的混合部署模式,其开源组件可本地集成但核心功能需调用API;2)完全开源替代方案对比,包括LTX-2、Wan 2.1等模型的硬件需求与特点;3)详细部署指南,以ComfyUI+Wan 2.1为例,涵盖软件准备、模型整合、参数调优等步骤,并提供了显存优化和多GPU配置技巧。文章为需要离线视频生成能力的用户提供了完整技术路径。

小明的博客 1万+

struts2和hibernate下的使用log4j记录日志

手册的配置,只能记录struts2的,不能记录hibernate; https://www.yiibai.com/struts_2/struts-2-log4j-integration-example.html log4语法讲解的很清晰 http://blog.sina.com.cn/s/blog_5ed94d710101go3u.html hibernate配置,但是很多信息打印出...

weixin_38671006的博客 382

【图数据库与知识图谱入门】2.2 图数据库 vs. 关系型数据库 vs. NoSQL数据库

本文对比了关系型数据库、NoSQL数据库和图数据库的核心差异与应用场景。关系型数据库以二维表结构为核心,适合结构化数据的事务处理(如MySQL),但多表关联查询性能随层级增加而下降。NoSQL数据库(如MongoDB)具有灵活schema,适合海量非结构化数据存储,但关联查询能力较弱。图数据库专注于节点-边关系建模,擅长处理复杂关联分析(如社交网络)。通过学生-课程案例展示了MySQL的多表JOIN操作和MongoDB的两种关联实现方式(内嵌文档和文档引用),揭示了不同数据库在数据关联处理上的本质区别。

kngines 1542

定时移动鼠标点击鼠标,防止电脑息屏的vba脚本

定时移动鼠标,使系统始终处于激活状态,防止系统息屏。

panfei263031的博客 5932

Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)(转载)

在前两章我为大家详细分析了 JAR 包的选择和必须的配置文件,那么这一章,我就对例子的层次结构进行说明,并实现除 WEB 层的功能代码。      第三部分:建立框架代码     工程结构          大家可以看到,本例一共分为: dao 、 entity 、 service 、 web 四层。另外在这些层次下,还以业务功能再进行分...

天庚天空 116

DIY电磁炉核心驱动方案:IR2153PBF自振荡半桥芯片实战指南(附电路图)

本文详细介绍了IR2153PBF自振荡半桥驱动芯片在DIY电磁炉核心驱动方案中的实战应用。该芯片集成了振荡器与600V高压驱动能力,仅需少量外围元件即可生成互补带死区的PWM信号,极大简化了半桥逆变电路设计。文章深入解析了其工作原理、关键参数,并提供了完整的电路设计、PCB布局指南及调试步骤,帮助电子爱好者构建稳定高效的感应加热驱动核心。

beer8的博客 586

Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)(转载大象)

在上一章中详细分析了JAR包的选择,那么这次我将对例子中的一些必须的配置文件进行下说明。虽然这些配置在网上也很容易找到,但是很多都没有讲个因为所以出来,这样根本就得不到提高。在此,大象为各位详细分析一下这些内容。    实例中涉及的配置文件有这么几个    applicationContext.xml    jdbc.properties    log4j.properties    struts...

skyqqzhou的专栏 132

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2768

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3278

Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)

转自:Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)       Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)     在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过一个实例,详细的为大家讲解如何实现全注解式的开发。    开发环境    JD...

阿O、不拽 190

第六:Charles抓包-苹果手机抓包

【代码】第六:Charles抓包-苹果手机抓包。

欢迎来到本博客! 1658

Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)

转自:Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)   在前两章我为大家详细分析了JAR包的选择和必须的配置文件,那么这一章,我就对例子的层次结构进行说明,并实现除WEB层的功能代码。    第三部分:建立框架代码    工程结构        大家可以看到,本例一共分为:dao、entity、service、web四层。另外在这些层次下,...

阿O、不拽 137

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

struts2+spring4+hibernate5整合实例

struts2作为一个很传统的mvc框架,在一些项目中,仍然发挥着重要的作用,另外hibernate和spring的结合也是很常见的,这里介绍struts2+hibernate5+spring4的整合,因为struts2支持最高的spring是4版本,所以这里采用的是spring4。整合的思路比较简单,可以从struts2+spring整合,然后接着整合hibernate+spring。也可以反过...

feinifi的博客 1778

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring2.5+Struts2+Hibernate3整合之五

转载请注明:来自http://blog.csdn.net/M_ChangGong/ 作者:张燕广该篇主要编写Service层代码以及针对Service层功能的Junit测试代码在src下创建包com.zyg.ssh.service,在该包下创建接口StudentService,其代码如下:package com.zyg.ssh.service;import java.util.

长弓的专栏 4088

Spring2.5.6+Hibernate3.0.5升级到Spring3.0.5+Hibernate3.3

SSH框架升级 Spring2.5.6+Hibernate3.0.5升级到Spring3.0.5+Hibernate3.3 1、引言 项目使用的是Struts1 + Spring2.5.6 + Hibernate3.0.5框架,但项目需要开发Flex客户端, Spring 2.5.6不支持与Flex集成,于是决定升级Spring至 3.0.5版本 ,升级Spring的过程中,发现Sprin

rchm8519的专栏 5361
上一篇: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)
下一篇: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)
dw_java08
博客等级 码龄15年 122粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值