- 浏览: 596735 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
jianxin1009:
你说的答案是对的
Re: 一道微软的面试题(年薪40万) -
thrillerzw:
应该相信爱情
忽然相信爱情。。。 -
weng:
jaxchow 写道mikeandmore 写道我觉得国外之所 ...
国外项目的代码质量真是高啊 -
cinhoo:
怎么也应该叫大蛇蛋才对嘛
lazypy 这个小蛇蛋不错 -
rosolio:
这个怎么解决?
Hibernate Annotation的中@ManyToOne和CascadeType问题
什么是crazyPOJO?
是一个基于jdk5 annotation的辅助api包,主要用于POJO的操作,将被设计成0依赖(不依赖其他的jar文件),最简化,速度优先的api包。
为什么编写crazyPOJO?
因为最近发现equals,clone,hashCode,toString这类的简单方法充满了太多的重复代码。
使用xstream导出pojo为xml时,不能定制导出字段。
还会加入其他的新功能。如pojo2xml,pojo2json,json2pojo,xml2pojo
一切与pojo有关的方法都可能被加入。
如何使用crazyPOJO?
在关键的字段的getter方法上加上@ValueField,在colone,equals,hashCode,toString中调用ObjectMethods.beanXXXX方法即可。
已知bug
下面的POJO会发生死循环。
对上面的代码,解决办法,是只在getA()上加@ValueField,或者只在getB()上加@ValueField,即便是在自己写的equals方法中,没有注意这种嵌套关系,也会发生死循环。
兄弟们,如果发现新bug,或者有什么好提议,请一定要留言。
你说的很有道理,但还没有想到需要传什么参数给ValueField给你一个参考:
@Validate("min=1900,max=2007")
你说的很有道理,但还没有想到需要传什么参数给ValueField
没有下载,不过粗看了一下.
那一个"@ValueField"作用是什么?
假如这一个name和bool属性加这一个标签的情况下,基代码是不是相当于,举例:
暂时做猜测
类似你所说的,但生成hashCode的机制不是简单的加法
@ValueField作为equal,hashCode,toString,clone所关注的字段。
没有下载,不过粗看了一下.
那一个"@ValueField"作用是什么?
假如这一个name和bool属性加这一个标签的情况下,基代码是不是相当于,举例:
暂时做猜测
是一个基于jdk5 annotation的辅助api包,主要用于POJO的操作,将被设计成0依赖(不依赖其他的jar文件),最简化,速度优先的api包。
为什么编写crazyPOJO?
因为最近发现equals,clone,hashCode,toString这类的简单方法充满了太多的重复代码。
使用xstream导出pojo为xml时,不能定制导出字段。
还会加入其他的新功能。如pojo2xml,pojo2json,json2pojo,xml2pojo
一切与pojo有关的方法都可能被加入。
如何使用crazyPOJO?
在关键的字段的getter方法上加上@ValueField,在colone,equals,hashCode,toString中调用ObjectMethods.beanXXXX方法即可。
java 代码
- package org.crazypojo.test.simple;
- import org.crazypojo.annotation.ValueField;
- import org.crazypojo.internal.ObjectMethods;
- public class Bean {
- private long id;
- private String name;
- private boolean Bool;
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- @ValueField
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @ValueField
- public boolean isBool() {
- return Bool;
- }
- public void setBool(boolean bool) {
- Bool = bool;
- }
- @Override
- public boolean equals(Object obj) {
- return ObjectMethods.beanEquals(this, obj);
- }
- @Override
- public Object clone() {
- return ObjectMethods.beanClone(this);
- }
- @Override
- public int hashCode() {
- return ObjectMethods.beanHashCode(this);
- }
- @Override
- public String toString() {
- return ObjectMethods.beanToString(this);
- }
- }
已知bug
下面的POJO会发生死循环。
java 代码
- class A{
- B b;
- @ValueField
- B getB(){
- ...
- }
- class B{
- A a;
- @ValueField
- A getA(){
- ...
- }
对上面的代码,解决办法,是只在getA()上加@ValueField,或者只在getB()上加@ValueField,即便是在自己写的equals方法中,没有注意这种嵌套关系,也会发生死循环。
兄弟们,如果发现新bug,或者有什么好提议,请一定要留言。
- crazypojo-0.0.1.rar (12.9 KB)
- 下载次数: 50
评论
13 楼
ajoo
2007-03-20
受你启发,昨天晚上按照自己的思路也写了一个ValueObject类。挺简单的,150行代码。想着我们的项目也许能用上。
不过,这种需求似乎挺普遍的,莫非没有现成的库已经这么做了?(比如sojo?)
不过,这种需求似乎挺普遍的,莫非没有现成的库已经这么做了?(比如sojo?)
12 楼
jasongreen
2007-03-20
lococode
ajoo
非常感谢你们的支持和意见,我想把它开源,你们是否愿意加入,我还想加入更多的功能
ajoo
非常感谢你们的支持和意见,我想把它开源,你们是否愿意加入,我还想加入更多的功能
11 楼
stone
2007-03-20
jdk5 annotation
hibernate-annotation.jar难道不是做这个的么?
hibernate-annotation.jar难道不是做这个的么?
10 楼
ajoo
2007-03-20
想法很cool。没准儿我们可以用。
几点建议:
1。annotation最好可以直接用在field上,private field也可以。
2。如果整个类被annotate了(所以这个ValueField最好改名成Value),那么所有非transient的field都当成@Value。
3。最好提供一个ValueObject的基类来自动实现equals/hashCode/toString。这样如果我继承ValueObject就不用写这三个讨厌的东西了。
4。clone需要么?我不是可以直接implements Cloneable?为什么需要ObjectMethods.beanClone()?
5。@Value("str")可以用来指定某个field或者整个对象在toString里面的名字。
几点建议:
1。annotation最好可以直接用在field上,private field也可以。
2。如果整个类被annotate了(所以这个ValueField最好改名成Value),那么所有非transient的field都当成@Value。
3。最好提供一个ValueObject的基类来自动实现equals/hashCode/toString。这样如果我继承ValueObject就不用写这三个讨厌的东西了。
4。clone需要么?我不是可以直接implements Cloneable?为什么需要ObjectMethods.beanClone()?
5。@Value("str")可以用来指定某个field或者整个对象在toString里面的名字。
9 楼
lococode
2007-03-20
jasongreen 写道
lococode 写道
哈哈,也许你应该传递些信息给ValueField ,或许就更完善点了。
你说的很有道理,但还没有想到需要传什么参数给ValueField
@Validate("min=1900,max=2007")
8 楼
jasongreen
2007-03-17
lococode 写道
哈哈,也许你应该传递些信息给ValueField ,或许就更完善点了。
你说的很有道理,但还没有想到需要传什么参数给ValueField
7 楼
lococode
2007-03-17
哈哈,也许你应该传递些信息给ValueField ,或许就更完善点了。
6 楼
lococode
2007-03-17
我想你这return ObjectMethods.beanEquals(this, obj); 等等 ObjectMethods.beanXXX只能做基本需求时使用。
你是无法知道具体业务什么时候需要哪些字段作判断。或许,toString时需要这个属性,但equals不需要。或许hashCode更不一样。
用Commons lang 就够了。
你是无法知道具体业务什么时候需要哪些字段作判断。或许,toString时需要这个属性,但equals不需要。或许hashCode更不一样。
用Commons lang 就够了。
5 楼
jasongreen
2007-03-16
lighter 写道
jasongreen 写道
目前比较简单,是辅助编写,clone(), hashCode() ,equals(obj), toString(),我想还是比自己写要方便许多的。
没有下载,不过粗看了一下.
那一个"@ValueField"作用是什么?
假如这一个name和bool属性加这一个标签的情况下,基代码是不是相当于,举例:
public int hashCode() { return this.name.hashCode()+this.bool.hashCode();; } public String toString() { return new ToStringBuilder(this).append("name", this.name).append("bool",this.bool).toString(); }
暂时做猜测
类似你所说的,但生成hashCode的机制不是简单的加法
@ValueField作为equal,hashCode,toString,clone所关注的字段。
4 楼
lighter
2007-03-16
jasongreen 写道
目前比较简单,是辅助编写,clone(), hashCode() ,equals(obj), toString(),我想还是比自己写要方便许多的。
没有下载,不过粗看了一下.
那一个"@ValueField"作用是什么?
假如这一个name和bool属性加这一个标签的情况下,基代码是不是相当于,举例:
public int hashCode() { return this.name.hashCode()+this.bool.hashCode();; } public String toString() { return new ToStringBuilder(this).append("name", this.name).append("bool",this.bool).toString(); }
暂时做猜测
3 楼
hama
2007-03-16
lsdafjlska
2 楼
jasongreen
2007-03-16
目前比较简单,是辅助编写,clone(), hashCode() ,equals(obj), toString(),我想还是比自己写要方便许多的。
1 楼
Arden
2007-03-16
没看出来有什么比较爽的地方啊?
发表评论
-
jvm调优经验
2010-04-23 17:50 956转自一个没写地址的网站,所以我也写他的网址了,肯定不是他们原创 ... -
jvm优化配置
2010-04-23 17:38 1102JVM优化配置《一》 OOM ... -
国外项目的代码质量真是高啊
2010-03-27 02:19 2635近期有幸承接到了一个 ... -
django做的那么好,我还有必要维护做java版lightmtv的吗?
2009-03-22 21:07 2201我一直想做web框架,后来做了lightmtv。 做的终于有 ... -
AOP不就是HOOK嘛
2008-10-07 16:20 1231AOP就是HOOK 炒概念,大忽悠 -
Hibernate各模块之间应注意兼容性
2008-09-10 16:11 1471http://www.hibernate.org/6.htm ... -
让runjettyrun可以修改运行中的项目
2008-07-30 16:53 1911最近使用runjettyrun 替代了jettylaucher ... -
你认为java适合开发互联网网站吗?
2008-07-21 13:44 4135我这里说的互联网网站指的是拥有很大并发访问量的互联网网站,并且 ... -
Person对象中"姓-名"的设计及中英习惯不同的问题
2008-06-25 11:42 1458以前一直用 FirstName,LastName来进行设计,一 ... -
Maven-Ant-Task 使用手记
2008-04-15 15:51 7641Maven的依赖管理的确是个好东西。但在集成构建方面,Ant显 ... -
对象关联关系
2008-03-04 15:03 2628双向关联,lazy Global Refrence Key, ... -
给国人的CTE的一些建议
2008-01-17 10:45 2806非常好的项目,首先他是中国人开发的,太棒了! http://w ... -
Hibernate ? ActiveRecord ? pretty code!
2008-01-09 22:44 2346看到了段代码,贴出来聊聊 public class Per ... -
官方Annotations文档中文版
2007-12-30 12:03 2597以下几个Java官方文档描述了一些java区别于其他语言的特殊 ... -
Holder模式
2007-04-28 15:33 1925程序经常需要用到配置文件,但我们又并不想关心何时读取配置文件, ... -
获取java heap 大小
2007-04-09 14:28 2601The heap is the area in memory ... -
运行web项目的几种方法
2007-04-02 16:56 40211. 使用tomcat plugin,eclipse 插件,可 ... -
也论java加壳
2007-03-18 14:15 13053在C世界,对代码进行加 ... -
如何取得某个包下面的所有的Class对象
2007-03-17 14:18 4238查看了javadoc,google了,没有找到好的答案,有个例 ... -
修改了Tapestry5的源码,完全支持中文了
2007-03-15 22:25 6177Tapestry5最新check下来的代码,中文问题还没有解决 ...
相关推荐
pojo-updater-compile Android apt plugin for pojo-updater License Copyright 2015 杭州树洞网络科技有限公司 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file ...
Generate POJO-JPA-Repository-Service
Generate POJO-JPA-Swagger-DTO
Generate POJO-JPA-PO
maven-guvnor-install-pojo-plugin-1.1.0.12-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.17-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.16-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.15-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.14-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.13-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.11-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.14.jar
maven-guvnor-install-pojo-plugin-1.1.0.17.jar
maven-guvnor-install-pojo-plugin-1.1.0.16.jar
maven-guvnor-install-pojo-plugin-1.1.0.15.jar
maven-guvnor-install-pojo-plugin-1.1.0.13.jar
maven-guvnor-install-pojo-plugin-1.1.0.12.jar
maven-guvnor-install-pojo-plugin-1.1.0.11.jar
本工具包"mybatis自动生成pojo-dao-mapper工具"正是为了帮助开发者更便捷地创建POJO(Plain Old Java Object)、DAO(Data Access Object)和Mapper接口,从而减少手动编写这些重复代码的工作量。 在Java开发中,...
Inspired by lot of dummy work to create matchers for fields in auto-generated beans to write POJO-based tests. Generates Hamcrest's Feature Matchers for every field annotated with @GenerateMatcher ...