![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言
文章平均质量分 79
郗晓勇
这个用户不懒,但是依然什么也没有留下。
展开
-
依赖注入 接口 抽象
刚开始接触这个概念的时候感觉依赖注入好神秘,尤其是看到资料说某个大学教授关于这个东西发表了一篇论文,然后开源社区就是根据这篇论文逐渐的形成了著名的Spring框架,什么控制反转等概念顿时风靡了开源社区。这使得EJB这个JavaEE亲妈的儿子都不招待见了(当时还是EJB2)。起初是怀着崇敬的心态去学习Spring感觉这个框架配置好灵活,因为好灵活所以好麻烦,因为好麻烦所以好高深。后来越用越感觉没啥了原创 2013-12-31 17:09:01 · 3174 阅读 · 36 评论 -
JSF教程(4)——生命周期概述
对于任何一个应用而言其完成自身功能的各种步骤就是她的生命周期,一般是指从开始创建(这里可以是组件、控件等等任何应用可能要用到的对象)经过中间一系列的步骤到最终的结束(呈现内容)。其实以往接触的CS系统也有声明周期,只不过不需要开发者去关注罢了。比如在使用VB开发CS架构的系统开发者不需要关注哪个控件是什么时候创建的,什么时候显示的,什么时候在内存中被销毁的等等这些事情。所有的应用都有其生命周期,在Web应用的生命周期中有下面几个环节是最常见的,当然在JSF中对于下面的几个环节也是必不可少的。原创 2014-04-30 21:50:37 · 2975 阅读 · 3 评论 -
JSF教程(12)——生命周期之Render Response Phase
在这个阶段JSF实现者建立视图委托当局通过合适的资源渲染页面。如果这是一个初始请求,在页面上 需要展示的组件将会被加入到组件树中。如果这不是一个初始请求,那么各个组件已经被加载到树中那么将不会再次加载。如果请求是一个postback类型的请求而且在处理值的相关阶段(ApplyRequest Values phase,Process Validations phase,或者update Model原创 2014-06-30 23:46:49 · 2406 阅读 · 2 评论 -
JSF教程(11)——生命周期之Invoke Application Phase
JSF教程(11)生命周期在这个阶段JSF实现将处理任何应用界别的事件,例如表单的提交或者链接点击后跳转到另一个页面。这时如果应用需要重定向不同 的web应用字眼或者产生一个资源其并不喊任何的JSF组件,那么就调用FacesContext.responseComplete方法。如果正在被处理的这个视图是从重建状态信息从先前的一个请求而且如果一个组件引发了一个事件,那么这些事件将会传递到相关的监听器原创 2014-06-30 23:34:03 · 2278 阅读 · 4 评论 -
JSF教程(3)——初探JSF中的Ajax
Ajax是提高用户体验的最有效方法之一,同时也是提高系统性能的方法之一。提供页面局部刷新所以可以满足上面的两个要求。在JSF当中可以通过两种方式加入Ajax特性。一种是手动写JS代码,另一种是用JSF自带的功能(其中封装了Ajax特性而已)。后者是本文要介绍的重点。在一些类似与buttons,text当中可以使用Ajax来实现自己想要的功能,说的再多不如代码来的实在一些。原创 2014-03-31 23:42:17 · 8598 阅读 · 7 评论 -
JSF教程(1)——简介 + HelloWorld
在写第一个HelloWorld之前先来宏观的了解一下JSF,也许你之前使用过Struts(1或者2),SpringMVC,甚至于直接采用JSP+Servelet开发过web层。JSF与这些最大的不同是JSF是基于一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。如果你之前接触过VB或者.Net(貌似微软的东西很喜欢采用这种组件化的方式)相信你更加能够理解“以组件原创 2014-03-29 02:02:47 · 16158 阅读 · 26 评论 -
EasyMock 单元测试
之前写单元测试的时候用的是自己的“方法”,最土办法就是造不同的数据然后进行不同的分支进行覆盖,其实效率很低而且有些方法测试不到。比如在系统当中需要和容器进行打交道的地方就很费劲,要么就是启动一个容器(考虑使用jetty)要么就优化代码将使用容器得地方提取出来,但是这要求写代码的人有充分的自觉性。但是如果使用mock就能有效的避免这种尴尬局面。核心代码如下,其中整个项目已经上传,需要的童鞋可以点击下原创 2013-12-31 23:52:35 · 2651 阅读 · 22 评论 -
公交司机解决PSQLException
最近遇到了一个bug,是关于JPA语句的问题,其实代码很简单,就是使用NamedQuery对数据库中符合条件的数据进行更新操作,代码如下(其实不想贴代码)@NamedQuery(name = "customer.updateSentToBusinessCheckByCustomerIds", query = "update Customer as c set c.sentToBusinessChe原创 2013-10-31 13:36:21 · 6337 阅读 · 14 评论 -
VIM Tutorials----(updating)
This is my first English tutorial; I hope I can help you to learn VIM. Any question send email to me. Thank you for watching!原创 2013-08-01 21:32:03 · 2043 阅读 · 16 评论 -
系统性能调优(5)----Java循环与字符串代码优化
在系统性能优化的时候循环和字符串处理一直是非常值得注意的地方。从心态上我们一定不能把自己的眼界放在十次或者是百次循环的层次上,也不能把自己要处理的字符串当做是有十个二十个字符。每次遇到循环都要假定这个循环是上万次的,每次要处理的字符串的时候一定要告诉自己这个字符串将来有可能是很大的。不要等到数据量真的达到十万、百万的级别之后再采取处理,那样的话成本的消耗就太大了。本文将介绍关于Java代码中循环和原创 2013-06-05 16:27:21 · 4531 阅读 · 8 评论 -
系统性能调优(6)----Java异常处理性能优化
执行一个catch代码块和抛出一个异常花费是很高的,这个过程中的性能损耗主要是由于当创建一个异常时要获得线程栈的一个快照。抛出异常首先要创建一个新的对象Throwable类的构造函数调用名为fillInStackTrace的方法,fillInStackTrace方法检查堆栈,收集调用跟踪信息。由于在处理过程中创建了一个新的对象,所以说只要有异常被抛出,JVM就必须调整调用堆栈,系统资源开销也就增大原创 2013-06-12 21:09:34 · 9273 阅读 · 5 评论 -
Java7中的文件和目录管理----Path类
Path类在JDK7帮助文档中的解释是定位一个文件或者指明一个路径。说白了就是可以代表一个带有路径的文件定位也可以表示一个路径。其实用起来还是很简单的如下代码所示import java.io.IOException;import java.nio.file.LinkOption;import java.nio.file.Path;import java.nio.file.Paths;pub原创 2013-04-21 15:32:37 · 11362 阅读 · 7 评论 -
Java中的Annotation(1)----三个基本Annotation
Annotation简介从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解,也有地方称之为注释),其实说白了就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation,程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验原创 2013-02-28 22:10:31 · 4056 阅读 · 5 评论 -
Java中的Annotation(2)----Annotation工作原理
上一篇文章已经介绍了如何使用JDK的三个标准Annotation,本文将介绍Annotation的原理,以及如何自定义Annotation,并利用Annotation来完成一些实际的功能。定义Annotation定义新的Annotation类型使用@interface关键字,这从一定意义上说明Annotation和接口的定义是有相似之处的。如下代码定义了一个Annotation //使用DK的元数原创 2013-03-18 01:06:06 · 6970 阅读 · 5 评论 -
动态代理(2)----动态代理和AOP
根据前面介绍的Proxy和InvocationHandler,实在很难看出这种动态代理的优势,下面介绍一种更实用的动态代理机制.只要我们开发一个实际使用的软件系统,总会出现相同代码重复出现的情形,在这种情形下,最常见的做法是:选中那些代码一路“复制”、“粘贴”立即实现系统的功能,如果仅仅从软件功能上来看,他们确实已经完成了软件的开发。对于采用上述方法实现的系统,在软件开发期间可能会觉得无所谓,但如原创 2013-02-28 22:09:27 · 4931 阅读 · 3 评论 -
动态代理(1)----JDK动态代理
在Java的Java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类或动态代理对象.Proxy提供用于创建动态代理类和代理对象的静态方法,它也是所有动态代理类的父类.如果我们在程序中为一个或多个接口动态地生成实现类,就可以使用Proxy来创建动态代理类:如果需要为一个或多个接口动态的创建实例,也可以使用P原创 2013-02-27 14:05:07 · 2731 阅读 · 2 评论 -
JSF教程(5)——生命周期概述(续)
JSF页面在其内部是以一个树的形式进行表示的(放到哪先别管,后面的文章详细的告诉你),就像我们平时写xml那样,有最顶级的父节点以及下面的孩子节点,孙子节点等等。这样的一个对象在JSF当中叫做View(视图?),这就很好能解释之前为什么会有ViewScope这个注解来标识manageBean的范围了。相信读到这里再去理解前面文章中的Scope会有更深刻的理解。原创 2014-04-30 21:50:49 · 2668 阅读 · 2 评论 -
JSF教程(6)——生命周期中处理请求
当JSF处理一个initial请求的时候程序将会创建一个新的view并且将它储存在FacesContext的实例中,这里需要注意的是只有在JSF的Response指向另一个JSF的View的时候上面的过程才会执行。其实这很好理解,如果简单一个超链接或者一个按钮将请求发送到服务器,而这个请求仅仅是跳转到一个不包含任何JSF组件的页面那么在服务端将没有任何View被产生,更别说被储存在FacesContext的实例中了。原创 2014-04-30 21:54:01 · 3202 阅读 · 2 评论 -
5 class design principles [S.O.L.I.D.] in java
类是你java程序中的建筑模块。如果这些建筑模块不健壮,那么你的建筑(这里说的是你的应用程序)将会面在未来掉入痛苦的深渊。这基本上意味着当程序扩展的时候那些写的不好模块会导致你陷入非常困难的境地,或者程序在无论是生产还是维护方面将面临必然的设计问题。另一方面相比而言一系列拥有良好设计的类可以加快编码的速度,而且还会减少bug的数量。在这篇文章中我将会列出5个最值得推荐的设计原则。当写类的时候你应该翻译 2015-07-31 23:50:55 · 2105 阅读 · 1 评论 -
Play Framework
有别于其他臃肿的企业级Java框架,简洁的Play框架提供另外一种选择,它关注于开发者的效率和 RESTful 风格的架构。Play 是敏捷软件开发的完美伴侣。Play 框架的目标是让基于 Java 的 web 应用开发变得更加容易,让我们看一下它是怎么做到的。没有痛苦的 Java 框架Play 是一个纯 Java 的框架,它让你保持使用你喜欢的开发工具和类库。如果你已经是一个使用 Java 平台原创 2015-03-31 22:25:39 · 1976 阅读 · 4 评论 -
JavaEE中的事务管理——事务划界
前面博文中大致介绍了一下事务,其实在企业应用服务器中事务是在不同的级别上存在的。比较简单的事务是最底层的事务,就是位于资源级别的事务管理。假设数据最终要存储在一个关系型数据库中,那么最底层的事务就是位于这里。我们把这种事务称之为资源本地事务(resource-localtransaction)在不用容器的大部分情况下开发人员要面对的事务都属于这里(其他的事务面对不到是因为水平不够!)。理解了数据的原创 2015-02-28 23:03:47 · 2162 阅读 · 2 评论 -
JavaEE中的Servlet
这次要说说servlet,或许作为读者的您感觉这个技术已经用烂了还说啥啊,但是基于servlet在整个javaEE体系的重要地位,所以我们不得不说说这种组件技术。想想一切Web开发都是基于HTTP协议的,当然servlet也不例外,根据JavaEE的官方文档中的描述我们知道每次服务器接收到请求后都会返回动态生成的内容,就是我们熟悉的往客户端输出html的过程。你所看到的浏览器中五彩斑斓的世界归根结原创 2014-12-27 22:46:16 · 2619 阅读 · 9 评论 -
消息驱动bean(MDB)实例
到目前为止前面介绍的有关JavaEE的东西都是同步的,也就是说调用者调用某个方法,那么这个方法必须立即执行并返回执行结果。用官方一些的语言来说就是“客户端通过业务接口调用一个方法,在将控制权返回给客户端之前,服务器完成该方法调用”。对于我们接触到的大多数操作而言这是最自然也是最容易实现的方法。然而,有些情况下客户端并不需要等待服务器响应,而只需要告诉服务器应该做什么就可以了,在完成“告知”任务之后原创 2014-12-23 23:14:58 · 4104 阅读 · 6 评论 -
JavaEE中的依赖性——依赖查找
关于依赖性管理我们要介绍的第一个策略就是依赖查找(dependency lookup)。这种策略是JavaEE中传统形式的依赖性管理,这里可以看到JavaEE规范中的JNDI(Java Naming andDirectoryInterface)的身影。从名字就可以看出来这里解决依赖性是通过查找的方式。就像上篇文章提到的,所要引用的资源是通过一对name与target对应的注解标识的。name用来表原创 2015-01-31 22:23:14 · 5752 阅读 · 6 评论 -
JavaEE中的依赖性——依赖性注入
当一个资源注解防止在一个字段或setter方法之上时,将会发生两件事。首先,就像放置在bean类之上一样声明资源引用(类似于上文中的代码示例),而且当创建组件时将把资源名称绑定到环境命名上下文。第二,该服务器将为您自动进行依赖性查找,并把结果设置到实例化的类中。自动超找一个资源并将它设置到类中的过程称之为依赖性注入(dependency injection)因为据说服务器将把解析的依赖性注入类中。原创 2015-01-31 23:01:36 · 2860 阅读 · 5 评论 -
单例会话bean(1)
在EJB3.1之前在会话bean的种类中是没有单例会话bean的,有的只是有状态会话bean以及无状态会话bean。毋庸置疑无状态会话bean以其优秀的性能被普遍使用,但是人们发现在无状态会话bean在使用过程中有两个最常值得关注的问题。按照官方一点儿的话说那就是一、bean池的感知开销。二、无法通过静态字段共享状态。其中第二点很好理解,因为无状态会话bean在每次请求的时候都需要从实例池中拿到一个实例对请求进行服务所以不可能存在像普通java变量那样通过共享静态字段共享不同请求之间的状态。第一点所谓的感知原创 2014-11-30 22:58:32 · 2599 阅读 · 2 评论 -
JavaEE中的依赖性管理
无论你多么伟大你都不可能独立完成一项伟大的任务,JavaEE组件也是一样的,没有那个组件可以独立完成所有的任务。一个组件在工作的时候往往需要其他资源的帮助,那么在寻求帮助的过程中就涉及到这次我们要说的“依赖性管理”的问题。比如一个简单的会话bean它需要借用JDBC的数据源持久化数据,再比如一个消息驱动Bean需要往JMS消息队列中传递消息。这里都涉及到如何在组件中获取服务器中的资源的问题。和现实原创 2015-01-31 11:27:56 · 1675 阅读 · 6 评论 -
单例会话bean(2)----生命周期回调与并发性
在生命周期回调方面单例会话bean与无状态会话bean在大体上是一样的,都拥有下面两个回调PostConstruct和PreDestroy。这连个回调分别是容器在服务器初始化bean实例之后以及释放bean实例之前调用。对于单例会话bean来说PostConstruct只会调用一次,而PreDestroy仅当应用程序整个关闭时才会调用,因此它也只会被调用一次,而无状态会话bean的这两个生命周期回调在创建和销毁bean实例时则需要经常被调用。原创 2014-11-30 22:59:54 · 2287 阅读 · 2 评论 -
JavaEE中的依赖性——声明依赖性
已下小结描述了一些JavaEE和EJB规范定义的资源注解。每条注解有一个可选的name特性以指定依赖性的引用名称。注解的其他特性特定于所需获取的资源类型。引用持久化上下文前面的章节演示了如何通过从Persistence类返回一个EntityManagerFactory,为持久化上下文创建一个实体管理器。在JavaEE环境中,@PersistenceContext注解可以用来声明一个持久化上下文上的原创 2015-01-31 23:05:29 · 2199 阅读 · 4 评论 -
JSF教程(8)——生命周期之Apply Request Values Phase
当一个组件tree在一个postbacks请求中被恢复之后其中每个组件从request的参数中取得各自的值,这里使用的是processDecodes方法。这个值会保存在本地的每个组件中,在源码中此过程的代码较为简单,因为实现者将取值这个操作全部封装在processDecodes方法中。不过说实话JSF的这部分的实现非常失败,因为在UIViewRoot中有将近两千行代码,这,这,这……原创 2014-05-31 00:27:58 · 3091 阅读 · 10 评论 -
JSF教程(10)——生命周期之Update Model Values Phase
在整个JSF生命周期中经历了取值、验证的阶段最终从request中拿到合理的值,下面就是在本阶段给相应的服务端对象(ManageBean)赋值了。JSF实现只是去更新和input组件中value属性对应的bean的属性的值,也就是说如果在界面上没有讲ManageBean的属性“绑定”到Input类的组件中那么这个Bean的属性是不会更新的。这里需要留意的是如果本地的数据不能转化为对应Bean的属性原创 2014-05-31 04:01:45 · 3795 阅读 · 14 评论 -
JSF教程(9)——生命周期之Process Validations Phase
在这个过程当中JSF的实现者使用processValidators方法处理所有在tree中的组件中注册的验证器。验证的过程就是通过每个组件已有的规则对其已经保存的值进行校验,同时也对输入的值进行校验,前提是组件的immediate属性没有设置为true。从代码来看在UIViewRoot中的这个processValidators方法和上个阶段中的processDecodes基本一致,不用说下一个阶段原创 2014-05-31 01:27:59 · 3466 阅读 · 10 评论 -
JSF教程(7)——生命周期之Restore View Phase
在JSF宏观的生命周期中分为Execute和Render,在Execute部分又将分为具体的步骤(可参考前面博客中的流程图)一共是六个步骤在后面的文章中笔者将带着大家慢慢的走进JSF(JavaEE仅仅是给了一个规范,至于具体代码如何实现。不同的中间件会有所不同),本篇博客就详细介绍第一阶段Restore View Phase。原创 2014-04-30 21:54:35 · 3196 阅读 · 5 评论 -
别跟我扯依赖注入
依赖注入(Dependencyinjection)在Java的流行框架中得到了广泛的应用,比如Struts,Spring等等。(Martin Fowler写过一篇这个模式的精彩文章,感兴趣的童鞋可以去度娘)在Fowler最先提出依赖注入这个术语之前,人们经常用“控制反转”(inversion ofcontrol)这个词来描述同样的事情。其实IOC的范围比依赖注入的范围更大,IOC包括依赖注入和依赖原创 2013-01-10 23:25:48 · 2298 阅读 · 7 评论 -
Model2中的两种控制器
上一篇文章中所提到在Model2模型里是利用Servlet控制器或者过滤器来接收来自用户输入并控制模型和视图部分做出相应的变化,其中核心部分是对URI进行处理,然后做出一系列的动作,最终将内容显示在浏览器上。下面的两段代码分别展示了用Servlet和过滤器来充当Model2当中的控制器。Servlet控制器的核心代码package struts2_01;import java.io.IOExc原创 2013-01-24 23:43:46 · 2126 阅读 · 3 评论 -
servlet过滤器
在Web应用中可以使用过滤器对所有的访问和请求进行统一的处理、IP访问限制以及用户发送请求的字符编码转换等,在进行具体的业务逻辑处理之前,首先要经过过滤器的同意处理,然后才开始进入真正的逻辑处理阶段。过滤器的基本原理过滤器的功能就是在服务器和酷虎中间增加了一个中间层,可以对两者之间的交互进行统一的处理,每一个从客户端提交的请求都需要通过过滤器的处理然后再进行其他操作。在实际开发过程中,过滤器可以用原创 2012-05-31 11:32:36 · 6454 阅读 · 6 评论 -
servlet应用之cookies&session操作
Cookies操作Cookies是指在Web应用中,为了辨别用户身份而存储在用户本地计算机上的数据。Servlet API提供了Cookie操作类,封装了操作Cookies常用方法。代码: package com.foxmail.xxy668;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;pub原创 2012-05-31 21:26:51 · 2817 阅读 · 5 评论 -
servlet文件操作
在JSP开发过程中,经常会遇到需要把相关内容存储为文件的情况,在JSP中是输入输出流进行操作的,在Servlet中叶可以使用输入输出流实现对文件的读写,同时使用Servlet还可以很方便地实现文件的上传下载。读取文件代码:package com.foxmail.xxy668;import java.io.BufferedReader;import java.io.File;import j原创 2012-05-30 14:41:14 · 4510 阅读 · 7 评论 -
JSP内置对象(2)----out、application
out对象out对象就是在Web应用开发过程中使用最多的一个对象,其功能就是动态的向JSP页面输出字符流,从而把动态的内容转化成HTML形式来展示,这个对象在任何JSP页面中都可以任意访问。1.out对象使用场合out对象的功能就是想JSP也卖弄输出数据信息,所以当有动态信息要展示给用户的时候就要用到out对象。2.out对象主要方法clear():这个方法原创 2012-04-03 21:22:49 · 4857 阅读 · 6 评论 -
JSP内置对象(1)----request、response
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍一下以上几种对象的使用。request对象request对象代表这是从用户发送过来的请求,从这个对象中可以取出客户端用户提交的数据或者是参数,这个对象只有接受用户请求的页面才可以访问。原创 2012-03-31 23:22:18 · 3898 阅读 · 4 评论