从应用角度看Hibernate源码(三):Hibernate常用接口的实现

在Hibernate的源码包org.hibernate.impl下的类,是Hibernate针对自我接口的重要实现。Hibernate所有重要接口的实现都放在了这里。这里面的最重要的接口大部分由Gavin King所实现。在这些接口中最重要的要数 SessionImpl 。这个类的源码如下
java 代码
  1. public final class SessionImpl extends AbstractSessionImpl    
  2.         implements EventSource, org.hibernate.classic.Session, JDBCContext.Context {   
  3. 。。。。。。   
  4. }  

 从这个类中我们可以看出很多的事情:

(1)首先作为Session的一个实现类,应该实现org.hibernate.Session.可接口中没有。打开org.hibernate.classic.Session发现继承了org.hibernate.Session。这样就有些明白了。但为什么不直接实现呢?通过看org.hibernate.classic.Session发现,这里面实现了很多Hibernate2的一些特性。从设计理念上来讲这样设计是非常的不错的。这个接口很明显是对Hibernate2的一个过渡,等大家都使用Hibernate3后,这个接口直接去掉即可。

 (2)打开EventSource,有件非常让人困惑的事情,这个类也实现了org.hibernate.Session。这个就有些不解了,首先对于这个SessionImpl来说是不解的。这里的结构显得不是很清晰。可能这个EventSource在别的地方也用到了,这里使用EventSource只是顺手牵羊。如果大家有更好的解释可以在下面接着回复。

(3)这里的Context接口主要是对Session的事务的接口。这个接口也有些不寻常的地方,它居然是另一个类的内部接口。而且是静态的接口,这里可能是为了实现事务的同步。不过,给人的感觉不是特清楚。

总之,在实现上感觉Hibernate这个类的实现有些问题。当然,这样做也许非常的精妙。对于这个类下面有时间会接着讨论。

你可能感兴趣的:(Hibernate)