- 博客(71)
- 收藏
- 关注
OneToOne的注意点
在Hibernate的OneToOne节点中有几个我个人觉得是需要注意的地方。constained属性,它的中文意思约束,值为一个布尔值。当设置为true值与false值是有区别的。区别为: ① 级联时储存顺序。值为true值时,先存入关联的表数据,然后才是自身。 ② 关联查询不同。值为true值时,是inner join,值为false值时,则为left jo...
2008-10-08 23:16:11 710
继承和组合的反思
无数的书中都在写尽量的使用组合而不要设用继承,可是让我们去看看那些“高人”写得设计模式吧,有多少是通过组合实现的。可见继承才是王道。他的优越性远远大于组合,我这里不提他的优越性,相信大家是知道的吧,那为什么还是老是去提倡组合呢?功能越强大的东西往往副作用更加大,去看看那些武侠小说吧最上乘武功其副作用都是很大的,最经典的就是葵花宝典了。哈哈。继续,也是说我们继承使用不当往往会产生对代码的...
2008-08-28 23:21:00 139
CGI 变量
CGI 变量介绍: ⑴SERVER-NAME: 运行CGI 程序的机器名或IP 地址。 ⑵SERVER-INTERFACE: 服务器类型。如CERN型或NCSA型。 ⑶SERVER-PROTOCOL:通信协议。 ⑷SERVER-PORT:TCP端口。默认端口为80。 ⑸HTTP-ACCEPT:HTT...
2008-08-23 19:53:51 292
接口的理解
1)什么是接口? 一些方法特征的集合。即接口仅仅描述方法的特征。 PS:这里忽略了接口对象常量进行的定义。个人觉得非常不错。常量是一个固定的东西,它不是抽象的因此它不应该出现在接口之中,也没有必要在接口中出现。 2)接口的目的? ① 实现代码的可插入性。对对象的关联和方法的调用实现可插入性。(抽象类同样可以做到) ② 创建混合...
2008-08-21 22:11:18 137
软件开发的随谈
看了写关于关于灵活性软件开发模式的文章之后,想谈谈读了这些文章之后的感受。 灵活性软件开发模式与传统模式开发最大区别在于流程的不同,即传统开发先将整个软件的框架定出来,之后才出现功能模块,而灵活性软件开发模式则不同,它首先完成的是功能模块,即先不考虑软件的整体因素先将功能模块做出来。接下来我想谈谈这样的软件开发谈谈自己的感想。(PS:自己没有这么开发过软件,只是对读到的文章...
2008-08-18 20:03:25 99
重载和覆盖
方法的重载和覆盖定义没有什么好说的了。直接写出他们的区别就可以了。 重载:编译器会检查方法名称,方法参数的个数和参数类型。 覆盖:编译器会检查方法名称,方法参数的个数和参数类型,还有方法返回类型和方法抛出的异常列表。 ...
2008-08-16 23:43:33 86
开闭原则的附属原则
了解开闭原则的附属原则我觉得并不是去掌握这些原则,而是通过这些原则更好的掌握开闭原则! 1)里氏代换原则:任何基类的可以出现的地方,子类一定可以出现。可以说里氏代换原则是开闭原则的一种实例的表现。因为违反了里氏代换原则那么一定也违背了开闭原则,反之却不一定会成立。 2)依赖倒转原则:要依赖于抽象,不要依赖于实现。那么什么东西依赖于抽象,不要依赖于实现呢?我认为可...
2008-08-13 23:03:08 162
UserType接口介绍
Hibernate 中UserType 接口用于设计自定义的类型与数据库的字段进行映射关系,这里的数据库字段可以是多个字段,而不仅仅是某一个字段。 那么Hibernate 这样的设计对程序有何意义或者说优点在于何处呢?因为我们同样可以使用编码的方式实现这样的功能! 使用UserType 最重要的一个原因是它可以实现业务层数据与数据库数据的分离,从而产生了自定义类...
2008-08-11 22:21:31 831
RTTI与反射
RTTI 的中文意思是“运行时类型识别”。在Java 中是通过Class 对象实现并且在使用“instanceof”操作符时也用到了RTTI。首先instanceof 操作符和Class对象有什么区别呢?instanceof 操作符用于判断对象的类型是否是指定的类型或其继承类,而Class需要通过isInstance 或isAssignableFrom 两个方法来判别,如果使用equa...
2008-08-07 21:21:04 102
可变性的封装原则
1)什么会改变? 对象。 2)如何封装? 抽象化。 3)如何抽象化? 定义界限。不要越界。否则会是可变性变得混乱。 4)与开闭原则的关系? 开闭原则定义了抽象层。可变性的封装原则定义了抽象对象。 ...
2008-08-07 00:27:03 566
开闭原则(OCP)
我想已经有无数文章介绍了什么是开闭原则。因此我不用花太多的唇舌去介绍,没有必要。想得话百度或google搜索下就OK 了。我将以一种全新的方式介绍开闭原则——自问自答。那就开始吧。 1)什么是“开”? 对扩展开放。 2)什么是“闭”? 对修改关闭。 3)开闭原则的关键是什么? 抽象化。 ...
2008-08-07 00:11:12 127
Hibnernate 的主键类型
Hibernate 提供了多种的主键生成方法。这里我做简单的介绍。PS:这不是让人看得,这是让我忘记的时候给自己提个醒。嘻嘻 1)Assigned:主键由应用程序设置。相信使用的次数相当相当的少啊~ 2)hilo:不懂。因此我绝对不会用的。 3)seqhilo:和hilo 差不多。因此也不懂,所以还是不会的。 4)increme...
2008-08-05 21:28:23 190
构造器
虽然,Java 的构造器非常的简单方便,但还是由我们需要值得注意的地方。 首先当然逃不过对象的初始化顺序。为了能够体现对象的顺序,我写了一个如下一个类,相信已经包含了所有的对象初始化顺序了class Base { public Base() { System.out.println( "B"); }}class Inner { ...
2008-07-22 23:22:28 116
Spring 自定义切入点
Spring Aop 强大之处你可以自己定义切入点并且对切入点进行合并使其成为新的切入点。这给我们很大的自由空间,任我们在其中翱翔。。。闲话少说。这里我就简单的介绍下如何自定义切入点。 Spring 自定义切入点只需要继承Pointcut 接口。它提供了两个方法:ClassFilter getClassFilter()和MethodMatcher getMethodMatc...
2008-07-22 21:44:49 310
UML 类图
类图用于显示类,接口以及它们之间的静态结构和关系的图。通过定义我们可以了解到类图分为两个方面一是类,接口的静态结构,二是他们之间的静态关系。 首先我们必须先了解类或接口的静态结构,这样才可以去理解他们之间的关联。而一个类图可以分为五个层次来说明类的静态结构(接口少于5层,一般只有3层): 类图的第一层是类名。当一个类名使用正体字时,说明该类可以创建实例。反之,说...
2008-07-22 00:03:44 163
Spring 动态切入点
由于动态切入点效率十分低下,并且一般并不会使用动态切入点。因此Spring 只提供了一个动态切入点:ControlFlowPointcut 类,它指定了执行aop 的类,即只有该类调用aop 方法时,方法才会动态的织入通知,其他类调用aop 方法和普通的方法调用一样。例子如下: 1)通知代码public class Before implements MethodBefore...
2008-07-20 23:36:59 287
Stack 介绍
Stack 是线性表的一种特例。它对某些特别的问题处理起来非常的方便,如数制的转换,括号匹配的检查等。这些问题都有一个共同的特性:数据是后进先出的(例子我会在今后的博客中写出例子的具体实现),这也正式Stack 的特性。Stack 存储数据有其专有术语,称为“入栈”,它将数据存放在栈的顶部。Stack 移除数据时也有其专有术语“出栈”,“出栈”是将Stack 顶部的数据移除。 这里还有...
2008-07-16 20:40:28 217
模式的要素
今天说的是模式的要素,这对大家学习模式是非常有帮助的。在学习模式的学习过程中,只有深刻的了解这些模式要素,才能够很好的理解你所学习的模式。如果你对你所学习的模式连这些要素都没有搞清楚那么说明你还没有理解这个模式。可以说模式的要素是对你学习模式的一个标准。 模式的首要素便是名字。模式的名字必须是有意义并且简短而准确。这有利于大家对该模式进行讨论研究。 然后是问题。...
2008-07-15 19:21:33 420
原创 Spring 的静态切入点
Spring 的静态切入点因为只在代理创建的时候执行一次而不是在运行期间每次目标方法的调用而执行,所以静态切入点的性能较好。是首选的切入点方式。Spring 为开发者方便的创建自定义的静态切入点提供了方便的父类——StaticMethodMatcherPointcut,我们只需实现父类的isMatch 方法便可。当然Spring 也提供了现有静态切入点。 NameMatch...
2008-07-14 10:05:28 207
模式的基本概念
在学习设计模式我们先应该学习一些模式的基础概念,这样再学习设计模式时会起到事半功倍的作用。以下的写模式的概念摘自《Java与模式》一书。 首先,要说的一个词是模式化,模式化的过程是把问题抽象化,在忽略掉不重要的细节之后,发现问题的一般性本质,并找到普遍的解决方案的过程。 那么什么是模式呢?我对书的解释进行了下总结。模式是描述具有代表性的问题和问题的答案。通常还要...
2008-07-13 18:16:48 863
元数据
Java 提供了三个标准注解: @Override 表示当前方法将覆盖基类的某个方法。这样编译器就会对该方法进行检查。 @Deprecated 表示当前元素使用注释编译器会提示警告错误 @SuppressWarnings 另外,Java 还提供了四种元注解: @Target 表示该注释用于什么地方。 ...
2008-07-10 09:02:02 109
Spring AOP
简单的来讲,我个人理解Spring Aop 的实现,是通过Java 编写来实现通知,Spring 的配置文件来织入通知。这便是Spring 的Aop。 Spring 对Aop 的实现有两种方式:1)目标对象实现某个接口,那么可以通过java.lang.reflect.Proxy 类来实现。2)目标对象没有实现任何的接口,那么只能通过使用cjlib 类来实现子类的生成。注意:...
2008-07-08 09:38:42 80
一元多项式的存储和其算法运算
线性结构可以存储一元多项式。一元多项式是由n + 1 个系数唯一确定,那么我可以将系数存放在线性表中,指数隐含在线性表的序号中。即线性表第一个元素存放指数0 的系数,线性表第二个元素存放指数1 的系数。。。以此类推线性表第n 个元素存放指数n - 1的系数。然而这样的存储方式存在一个空间浪费的问题,当指数有20 000 时但是多项式却只有三项,但我们却需要存储20 001项数据。 ...
2008-07-07 21:48:32 1009
Java1.5 新特性
在Java1.5 中增加了很多新的特性,首先我想介绍的新特性之一:泛型。 我对泛型一词的理解是:将抽象的类型具体化(Object 的泛型化,使其特指某一个特性的对象)。Java 通过泛型使对集合指定存储类型,在集合对象使用的时候不再需要强制转型。并且在往集合中存放数据时得到了编译器的检查。Java 的泛型很像C++中的模板机制。但两者可能存在一定的区别。(具体我也不知道。:...
2008-07-07 15:13:04 206
Spring 异常通知
Spring 的异常通知是在方法抛出异常之后将通知织入。需要注意的是异常通知只是当方法抛出异常时对抛出异常的情况进行操作,它不会捕获原方法抛出的异常,但是你可以通过异常通知抛出新的异常,我觉得这并不是一个好的主意。 Spring 提供了ThrowAdvice 接口来实现异常通知。ThrowAdvice 接口只是一个标示接口,它没有任何的方法,但是在使用时我们需要实现afte...
2008-07-07 09:59:25 393
Java 的基本特性
以下内容摘自《Thinking in Java》。并对内容进行了修改和添加了自己的理解。 Java的五个基本特性: 1)万物皆为对象。相信也正是因为万物皆为对象,面向对象的编程语言才可以解决任何的问题。其实这是对象的一个特性:抽象。 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。消息可以理解为对象方法的调用请求。 3)每个对象...
2008-07-06 21:29:18 106
final 关键字
根据上下文环境,Java final 关键字存在的细微的差别,但通常它指的是“这是无法改变的”。而不想改变的原因可能出于两种:设计或效率。 首先我们先要说的final 数据,final 数据如何提升效率的呢?编译器在编译常量时会同时计算使用该常量的计算公式,这样便减轻了运行时的负担,提高了效率。但是该常量必须是基本类型并且在创建时进行了初始化。在用final 修饰字段时可以...
2008-07-05 23:59:02 98
Spring 环绕通知
Spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别:1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知是不能决定的,他们只是在方法的调用前后执行通知而已,即目标方法肯定是要执行的。2)环绕通知可以控制返回对象,即你可以返回一个与目标对象完全不同的返回值,虽然这很危险,但是你却可以办到。而后置方法是无法办到的,因为他是在目标方...
2008-07-04 09:57:40 168
Spring 后置通知
Spring 的后置通知虽然如其名字那样,通知在方法调用之后织入。但准确的说,通知是在方法返回值之后和方法返回到调用地点之前被织入。我们可以通过Spring 自带的AfterReturningAdvice 接口轻松的实现方法的织入。AfterReturningAdvice 接口提供了afterReturning 方法来实现通知,即在afterReturning 方法中定义通知。afte...
2008-07-03 10:39:13 250
异常链
Java 1.4以后有了异常链。显然异常链是为了解决某种设计上出现的问题。那么这个问题到底是什么呢?通过阅读JDK 的源代码我们便可以有所了解。 异常链是为了解决某种特别的情况:A 方法调用B 方法时,B 方法却抛出了异常。那么A 方法是继续抛出原有的异常还是抛出一个新异常呢?我们可以具体的分析便可以了解异常链的用处了。 首先,是抛出原有的异常。这就很糟糕的设计...
2008-07-02 17:02:08 151
Spring 前置通知
前置通知顾名思意,该通知织入在方法调用之前。我们可以通过Spring 的MethodBeforeAdvice 接口实现。MethodBeforeAdvice 只提供方法before(),该方法无返回值,方法接受调用方法,方法参数和目标对象这3个参数。这里需要注意的是,虽然before()方法得到了调用方法的参数,这里值得注意的是方法参数可以进行更改! 例子如下: 1...
2008-07-02 14:19:08 271
new String("abc")的联想。。。
有这么一道Java 面试题:new String("abc")创建了几个String 对象?答案是2个。为什么呢。。。 这样从Java 的虚拟机说起,JVM 是通过栈堆的方式存储变量的。栈主要存放内部变量(基本变量)和对象的引用。栈的数据可以共享且读取速度快。堆用于存放对象数据。其读取速度不如栈那么地快。 接下来我们要分析“abc”的存储方式。它是以对象进行存储...
2008-07-01 13:23:22 87
Spring 的国际化
Spring 通过ApplicationContext 容器的MessageSource 接口实现Sping 对国际化的支持。 Spring 已经已经提供提供了一个现成的MessageSource 的实现类ResourceBundleMessageSource。因此只需要在Spring 的配置文件中进行简单的配置即可,如下:<bean id="messageSour...
2008-06-26 11:31:21 146
CustomEditorConfigurer
Spring 在装配Bean 时可以使用字符串装配其他数据类型,如URL。也就是说Spring 会自动的将String 类型转换成URL类型进行Bean 的属性装配。这是通过JavaBean API 实现的(java.beans.PropertyEditor 接口)。 那么如何通过Spring 配置将String 类型转换成自定义的类型呢? 这首先需要写一个编辑器类,该...
2008-06-25 13:30:18 218
进制转换方法
十进制转换为二进制,八进制,十六进制的算法有许许多多,但是使用位运算来实现进制转化在效率上是非常高的。代码如下:public class Digit{ public final static char[] DIGITS = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '...
2008-06-24 14:36:33 114
PropertyPlaceholderConfigurer
BeanFactoryPostProcessor 接口是对Bean 工厂的后处理操作。在Spring 的PropertyPlaceholderConfigurer 类是实现BeanFactoryProcessor 接口中非常有用的类。它用于Spring 从外部属性文件中载入属性,并使用这些属性值替换Spring 配置文件中的占位符变量(${varible})。Spring ...
2008-06-23 10:11:32 116
Java异常的限制
Java 中还是对异常有限制的——在继承和覆盖方法的过程中,异常声明只能越变越小。这是因为如果不这么做,继承和覆盖的方法声明了新的异常声明,那么在对象的向上转型并调用该方法时肯定会出现问题!异常声明越变越小有两层意思:1)继承和覆盖的方法只声明部分基类的异常声明。2)继承和覆盖的方法声明基类声明异常的派生类。但是异常的限制对构造器不起作用!派生类的构造器可以声明任何的异常,...
2008-06-19 23:20:48 243
线程的协作
在Java 中线程之间的协作是通过Object 的wait()方法和notify()方法来安全实现的。你要很好的使用线程的协作,首先要了解wait()和sleep()两个方法之间的区别。这也是经常考的一道Java 面试题。wait()与sleep()的区别:1)sleep()方法是Thread 类的方法,而wait()方法 确实Object 的方法。2)sleep()方法并...
2008-06-19 22:45:27 114
Bean 装配
Spring 容器内拼凑Bean 叫做装配。Bean 装配要点介绍:1)Spring 中的Bean 在默认状态中是单实例模式。当然你可以通过 节点的singleton 属性可以进行设置。为true 是单实例模式,false 是原型模式。缺省值为true。2)spring 的依赖注入可以通过构造方法和对象的set 方法。这里需要注意的是spring 首先通过构造方法注入对象的属性...
2008-06-19 10:00:05 106
线程状态
线程可以分四中状态:1)新建(new):线程对象仅仅是创建,并没有调用start()方法。2)就绪(runnable):只要调度程序将时间片分配给线程,它便可以立刻运行。3)死亡(dead):线程的run()方法返回以后。你也可以使用stop()方法,但是这在Java 2 中被废弃。因为这容易使进程进入不稳定状态。4)阻塞(blocked):线程可以运行,但是由于某个条件阻止了它的...
2008-06-18 21:46:23 105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人