开源组件的使用总结之一

  • Post author:
  • Post category:其他


开源的一些经验的一些积累:

spring:

IOC容器,帮你初始化一些bean,关联这些bean之间的依赖,管理这些bean。

在实际项目中使用的:初始化一些配置参数,集成其他开源项目组件,自己编写的组件等。

AOP:很少直接使用,但是spring里面的声明性事务就是使用这个方式实现的。

声明性事务:一般来说,j2ee系统中,有dao层,service层,dao层主要是负责持久化任务,service层作为业务逻辑的处理层,同时事务也会放到这一层。当然也可以再次分层,既事务控制的service层作为事务控制和部分业务逻辑处理,然后再在这个层之上建立一个更高层次的业务逻辑层。

PO VS VO

在一些系统中,需要做PO,Vo的转换,再这个转换的过程中有很多方式,比如克隆技术,这是使用java自身提供的拷贝技术,还有比如利用反射,javabean的一些特性实现属性拷贝技术(apache的开源组建)。还设计到一些浅拷贝 深拷贝的问题。

hibernate:

对象关系数据库之间的映射O/R mapping

让我们操作的不在是字段,行,而是我们定义好的对象和相应见名知意的属性。

同时屏蔽不同数据库之间的差异,能够以最低成本的迁移到不同数据库下工作。

延迟加载:

非延迟加载:太方便了,但是极大的影响系统的响应性能。

延迟加载:这里的核心就是在session没有关闭之前去取相关对象才能实现按需获得,一旦离开这个session环境就不能再去取得你想要的关联对象了

延迟加载--opensessionfilterinview 这是hibernate提供的一个知道视图输出结束才关闭session的操作方式,这样对开发确实非常方便,但是对于大型系统很难做好这个性能平衡的处理。

延迟加载--fetch为select方式 能够做到按需得到关联对象,对于单个对象,有多少关联兑现就会再次查询多少次,对于列表,就会产生N+1的问题。

延迟加载--fetch为join方式,这种就是在得到对象的同时,如果使用连接查询,相关联的对象会同时查询出来,这样避免的与数据库的多次交互。我个人比较推崇使用这种方式,但是一个前提是,你确实需要这些对象的关联对象,如果一些方式不需要这些关联对象,你可以大量“重载”这类方法。(重载不完全准确)。理由就是:既然你需要这些东西,就让他一次取出来(多次查询,时间自然长很多,严重影响性能),对于不同的情况(需要的关联对象不同)使用多个方法区分,当然这种方式的弊端就是大量近似的方法。

延迟加载--fetch的设置可以是在配置文件中,也可以是在hql中,hql中会覆盖配置文件中的设置。