幼学琼林--SpringSide推荐的JDK5.0 feature
随着光阴推移,Annotation 慢慢在开源框架中推广,泛型渐渐被程序员们用熟,加上AutoBoxing的小糖,SpringSide终于离不开JDK5.0。
1.AutoBoxing 与 For Each 循环
本来int的非Object性就很无聊,在JDK5.0终于提供了autoboxing功能。这个语法简化糖,被用在了每一个地方。
for each 循环也改善了原本总要愣一下的collection遍历。不过对于非JDK基本类型,collection必须用泛型声明,如List<Book>。
2. 泛型
泛型大量用于SpringSide Core中的基类,使子类更简洁,基类更强大。当然,基类是难读了,所以才需要社区花上这么长的时间来把<T>看到顺眼。
泛型使用的有两个定式:
2.1 避免强制类型转换
如果函数输入参数里含Class类型,而返回值又是该Class的实体,应该将该函数设为泛型函数。最典型的例子是HibernateGenericDao的get() 函数
package org.springside.core.commons.dao;import java.io.Serializable;import java.util.List;/** * 针对单个Entity对象的操作定义. * 不依赖于具体ORM实现方案. * * @author calvin */public interface EntityDao<T> {T get(Serializable id);[color=red]List<T> getAll();[/color]void save(Object o);void remove(Object o);void removeById(Serializable id);}
getAll()方法,放在这里是否合适? 4 楼 partech 2006-11-08 public class OrderManager extends HibernateEntityDao<Order>
服务层类继承针对单个实体类的DAO,是否意味着服务层代码一个事务中只能更改一个实体类?
如何处理变更多个实体类的情况? 5 楼 partech 2006-11-08 江南白衣 写道
3.Annotation
Annotation 大幅提升了Java的编程模式,SpringSide 目前运用的Annotation 有:
3.1. Hibernate Annotation
使用Hibernate Annotation 代替hbm文件,因为annotation高度的默认性,典型的POJO基本上不需要定义什么,代码的简约性和可管理性大幅提高,直追ROR。
另外,经过测试,annotation 完全能胜任一些比较复杂的Mapping定义,如Product-Book的父子继承关系,Order-OrderItem-Product的经典三角关系。
我认为应用Annotation速度确实是快了,但是将持久化和业务逻辑两个方面的东西简单混在一起,不是什么好味道。
建议采用aspectJ5中的declare annotation进行分离,在高效的同时,兼顾美观。 6 楼 江南白衣 2006-11-08 partech 写道public class OrderManager extends HibernateEntityDao<Order>
服务层类继承针对单个实体类的DAO,是否意味着服务层代码一个事务中只能更改一个实体类?
如何处理变更多个实体类的情况?
可以的啊,HibernateEntityDao的父类是HibernateGenericDao,里面的函数都是有Class参数。
60%以上的情况,一个Manager都只处理一个实体,另外的情况可以用带class参数的函数,或者注入另一个dao/manager . 7 楼 江南白衣 2006-11-08 partech 写道我认为应用Annotation速度确实是快了,但是将持久化和业务逻辑两个方面的东西简单混在一起,不是什么好味道。
建议采用aspectJ5中的declare annotation进行分离,在高效的同时,兼顾美观。
好,学习一下aspectJ5中的declare annotation先。只是ror怎么又没人说什么dao层隔离,逻辑隔离之类的味道问题呢。Java就是太多模式了,新公司的主框架居然是6层架构.....
8 楼 partech 2006-11-08 江南白衣 写道partech 写道我认为应用Annotation速度确实是快了,但是将持久化和业务逻辑两个方面的东西简单混在一起,不是什么好味道。
建议采用aspectJ5中的declare annotation进行分离,在高效的同时,兼顾美观。
好,学习一下aspectJ5中的declare annotation先。只是ror怎么又没人说什么dao层隔离,逻辑隔离之类的味道问题呢。Java就是太多模式了,新公司的主框架居然是6层架构.....
如果使用ActiveRecord也就没必要隔离了,但如果是ORM还是有必要吧。
俺们设计的从界面到数据访问好像也是6层。
java要快速,简便,干不过ROR,与其以己之短,攻人之长,倒不如反过来,做适用于复杂业务环境的构架。 9 楼 Tin 2006-11-09 内置的这几个Anno不错。
@Override防止子类写错名字
@SuppressWarnings("unchecked")让IDE清爽
@Deprecated清楚
Hibernate、Xfire、Compass的Anno在有IDE支持的情况下的确很爽。
DAO绑定到Entity似乎是Spring+Hibernate的时候比较惯用的,当然这么做起实只是代码横纵划分清楚,可是带来的形式化代码量大增,不爽呀。也许这时需要万能DAO,类似直接用session了。