`
koreyoshi
  • 浏览: 241347 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SSH全注解实例详解(2)(转)

 
阅读更多

转载地址:http://www.java3z.com/cwbwebhome/article/article8/81136.html?id=2583 

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

    实例中涉及的配置文件有这么几个
    applicationContext.xml
    jdbc.properties
    log4j.properties
    struts.xml
    web.xml 

    我准备在本章中只讲applicationContext.xmljdbc.propertiesweb.xmllog4j的配置大同小异而且也不在本文范围。至于struts.xml我准备留到后面与Action代码一起来讲,因为用的是struts2-convention-plugin插件来实现struts2的注解,所以这两个结合起来讲要好一些。

<iframe id="aswift_1" style="left: 0px; position: absolute; top: 0px;" name="aswift_1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="336" height="280"></iframe>

    第二部分:分析配置文件

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


    因为我们使用的是Hibernate来与数据库进行交互,把这些东西写在单独的文件里,是方便修改,如果你想换成SQL Server或是Oracle,只需要更改driverurl以及dialect,而且还可以自由控制sql语句的显示的开关,非常方便。至于写在这里怎么用呢?请接着看下面的applicationContext.xml说明。
    2applicationContext.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文件。
    另外在Spring 2.5.6 版中,加入了一个很有用的小功能,就是packagesToScan属性,它是根据value中定义的路径来扫描其下所有的注解实体类。大象对这个路径做了多种测试,另外又看了源代码,发现它只能匹配某一类型的路径,而不是所有路径。比如上面的value值表示,扫描entity包下面的所有包中的注解类,如果你将类直接放在entity包下,那么服务器启动和程序运行时都不会报错,但是当你的代码需要用到这个类的时候,就会出现异常,提示你找不到实体。
     


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



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

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

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

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



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


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



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


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



    在 2.1.6 版本里面,已经用这个过滤器取代了以前的FilterDispatcher,而且在api文档中已经标注为@deprecated(过时),并说明是从Struts 2.1.3版开始就弃用这个过滤器了,改用StrutsPrepareAndExecuteFilter,除此之外,还可以选择StrutsPrepareFilterStrutsExecuteFilter。不过大象建议大家还是选择StrutsPrepareAndExecuteFilter吧,这也是官方推荐的。至于这个过滤器的真正用途,我想在后面具体讲代码的时候再来详细分析它。
    web.xml里面的几个重要的配置就这些,不过不要忘了,给这些filter加上filter-mapping映射。还有一点,请注意这些过滤器的顺序,这个顺序是很重要的,程序运行时,是根据这些filter-mapping的排列顺序依次执行过滤操作的。如果不想出现莫名其妙的错误,请控制好这些过滤器映射的顺序。

    我会在最后一章附上源码,大家就这样慢慢看吧。看到最后一章的时候,可能这些相关的知识就比较清楚了。到时再对照源码练习下,应该会有一些收获。恩,这部分就到此结束了,我们下次继续。

分享到:
评论

相关推荐

    SSH全注解实例详解,hibernate,struts,spring

    在实际开发中,SSH框架的使用往往结合IDE(如Eclipse或IntelliJ IDEA)进行,这些工具通常有对SSH支持的插件,能帮助开发者快速生成和管理注解配置。同时,持续集成工具(如Jenkins)和版本控制系统(如Git)也是...

    ssh2注解实例详解

    在这个SSH2的全注解实例中,开发者会逐步学习如何在MyEclipse环境下创建项目,配置框架,编写Action、Service、DAO和实体类,并通过注解进行相应的配置。同时,SQL语句的使用和数据库的交互也是实例的重要组成部分,...

    Struts2+Spring2.5+Hibernate3全注解实例详解

    超级详细的SSH2项目实例详解,并且附带两个项目详解。两种注解实现方式。不同的生成数据脚本实现。 在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过二个实例,详细的为大家讲解...

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

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解,涉及的是JavaEE开发中常见的SSH框架(Struts2、Spring、Hibernate)的整合,尤其强调了注解在开发中的应用,旨在简化配置,提高开发效率。SSH框架的组合在...

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

    在这个全注解实例中,我们将深入理解如何利用Struts2.1.6、Spring2.5.6和Hibernate3.3.1构建应用程序,避免传统的XML配置文件,转而采用注解方式来提高开发效率。 **开发环境**: - JDK 1.6.0_18 - Eclipse 3.2.1 -...

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

    这个全注解实例详解旨在帮助开发者理解如何在不使用XML配置的情况下,通过注解实现这三大框架的集成与应用。 Struts2是MVC(Model-View-Controller)设计模式的一个强大实现,提供了一种用于处理HTTP请求和响应的...

    全注解版SSH增删改查实例

    总结来说,全注解版SSH增删改查实例是Java Web开发中一个实用的学习资源,它展示了如何在不依赖XML配置的情况下,利用Spring、Struts2和Hibernate的注解实现高效的业务逻辑处理。这样的实例有助于开发者快速理解和...

    基于全注解的SSH2框架

    **基于全注解的SSH2框架详解** SSH2框架,即Spring、Struts2和Hibernate的集成,是Java开发Web应用程序的主流框架之一。在这个基于全注解的SSH2框架中,我们将深入探讨如何利用注解来简化配置,提高开发效率,并...

    ssh注解版(已测试)

    在压缩包中的"Struts2[1].1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(转自大象).doc"文件,很可能是详细的SSH整合教程,涵盖如何使用这三个框架的注解配置进行开发。"ssh2"可能是指更高级或更新版本的SSH整合...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例

    总结起来,SSH2框架的全注解实例为开发者提供了一种高效、简洁的开发方式。通过注解,开发者可以更专注于业务逻辑,而不是繁琐的配置。然而,选择正确的jar包和版本,以及正确配置开发环境,是成功实施这种开发模式...

    SSH整合cxf webservice实例

    SSH整合CXF Webservice实例详解 在Java世界中,SSH(Spring、Struts、Hibernate)是一种常见的企业级应用开发框架组合,它提供了强大的MVC(Model-View-Controller)架构支持,以及持久层管理和业务逻辑处理。而CXF...

    SSH整合连数据库实例

    SSH整合连数据库实例详解 SSH(Struts2 + Spring + Hibernate)是Java开发Web应用程序时常用的三大框架。它们各自负责不同的职责:Struts2作为MVC框架处理控制器逻辑,Spring提供依赖注入和事务管理,Hibernate则...

    SSH框架搭建详解——登录实例

    SSH框架,全称为Struts2 + Spring + Hibernate,是Java Web开发中常用的一种集成框架,它结合了Struts2的MVC设计模式、Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面...

    ssh.rar_J2EE SSH_java ssh 详解_ssh_ssh j2ee

    这个"ssh.rar"压缩包可能包含了关于如何整合和使用这三个框架的详细教程和源码实例,帮助开发者深入理解和掌握SSH架构。 1. **Spring框架**:Spring是一个全面的Java应用开发框架,核心特性包括依赖注入(DI)和...

    SSH框架整合步骤详解

    SSH框架整合是Java Web开发中常见的一种技术组合,主要包括Spring、Struts2和Hibernate三个开源框架。这三者分别负责不同的职责:Spring作为整体的管理中枢,Struts2处理前端控制器,Hibernate则专注于数据持久化。...

    ssh2+cxf搭建webservice实例

    SSH2+CXF 搭建 WebService 实例详解 SSH(Struts2、Spring、Hibernate)是一个常见的 Java Web 开发框架组合,而 CXF 是一个用于构建和开发 Web 服务的开源框架。本教程将详细介绍如何在 SSH 项目中集成 CXF 来创建...

    基于注解式的ssh2人力资源系统

    《基于注解式的SSH2人力资源系统详解》 SSH2(Struts2、Spring、Hibernate2)是一个经典的Java Web开发框架组合,它为构建高效、稳定的企业级应用提供了强大的支持。在"基于注解式的SSH2人力资源系统"项目中,...

Global site tag (gtag.js) - Google Analytics