Re: 有什么RoR的特性是Java模仿不了的?

这几天潜心研究了一下Hibernate, Spring, ASM, Java5 Instrumentation。 恩,大概列出了这些技术来,明眼人就知道我要干啥了。没错,万恶的元编程,我最痛恨的元编程要登场了。我痛恨元编程,是因为我认为它的能力超越了人类大脑的范围。但是,Java想要在语法上能有超越,唯一的办法就是元编程了。在Java中做元编程有两种方式:
1、操作字节码
比如 AspectJ
2、用动态派生的类替换基类
比如 Spring AOP,Hibernate的Lazy Loading
后者能够达到的能力基本上已经被利用尽了。我感觉,要想突围,不妨就像AspectJ一样,走到字节码这个层面去。由于robbin给的挑战题目是去Active Record相关的,大家对于RoR的很多热情也投注在Active Record上,那我就从Hibernate用法简化入手吧。现在没有实现所有的功能,但是可以给大家看一个样子:

Hibernate配置文件,放在classpath根目录下
Hibernate.properties

[code]
connection.driver_class=org.hsqldb.jdbcDriver
connection.url=jdbc:hsqldb:mem:spike
dialect=org.hibernate.dialect.HSQLDialect
[/code]

User.java

[code]
public class User extends Entity<User> {

public String username;

public String password;
}
[/code]

业务类
Authentication.java

[code]
@Reborn
public class Authentication {

public static void register(String username, String password) {
User user = new User();
user.username = username;
user.password = password;
user.save();
}

public static boolean login(String username, String password) {
User user = new User();
return user.find(user.username == username, user.password == password).size() > 0;
}
}
[/code]

演示代码
RebornDemo.java

[code]
public class RebornDemo {

private void demo() {
System.out.println(Authentication.login("taowen", "password"));
Authentication.register("taowen", "password");
System.out.println(Authentication.login("taowen", "password"));
}

public static void main(String[] args) throws IOException {
new RebornDemo().demo();
}
}
[/code]

恩,这就是所有的代码了。能够想到的在语法上更进一步的就是把extends Entity变成implements Entity,但是这样的化必须用User.create() 来替换new User()了。

简化的地方:
1、Id字段自动插入
2、Entity自动标识
3、自动添加annotatedClass
4、hbm2ddl.auto缺省为create
5、hibernate.properties的每行自动添加hibernate.前缀
6、利用强类型的查询语法糖(user.username=="taowen")来代替基于字符串的HSQL

代价:
1、使用了强类型的查询语法糖的类要标记为reborn
2、在User和Entity之间使用了extends的关系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值