java Method用法
2015-08-06 15:50
671 查看
背景:在项目中有一堆javabean,要用在界面上画一堆tableview,要对这一堆tableview进行排序,因此要写一堆sorter类(假如为每个tableview都写一个的话),工作量比较大。
思考:其实这些sorter类都是差不多的,只是调用的javabean不同,方法名称不同,实现的原理,没有什么不同,那么该如何使用一个sorter类就可对所有的tableview进行排序呢?
思考结果:也许可以用Class类与Method类,也就是什么reflect机制。
困难:从来没用过reflect机制。
没有过,没关系。JDK5.0文档与google是我最好的老师。
下面就是我的成果了:
第一步,先建个javabean:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package test;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Model {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String
id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String
name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String
description;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Model() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
id = "id";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
name = "name";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
description = "description";
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String
getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(String
id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String
getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String
name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String
getDescription() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return description;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setDescription(String
description) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.description = description;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
第二步:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package test;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.InvocationTargetException;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.Method;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TestMethodReflect {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static final String
ID = "Id";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static final String
NAME = "Name";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static final String
DESCRIPTION = "Description";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//方法名集合
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static final String[]
ALL = { ID, NAME, DESCRIPTION };
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//这是测试数据
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static final String[]
MODELDATA = { "1", "Gavin",
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
"this
is model's test data" };
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[]
args) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Class
model = Class.forName("test.Model");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类的实例
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object
object = model.newInstance();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0;
i < ALL.length; i++) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类的set方法,参数为String类型
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Method
setMethod = model.getMethod("set" + ALL[i],
String.class);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//调用set方法
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
setMethod.invoke(object,
MODELDATA[i]);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类的get方法,无参数
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Method
getMethod = model.getMethod("get" + ALL[i], null);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//调用get方法,并输出数据
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println(getMethod.invoke(object, null));
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (ClassNotFoundException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (SecurityException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (NoSuchMethodException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (IllegalArgumentException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (IllegalAccessException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InvocationTargetException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InstantiationException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
ok,大功告成!
成功后的思考:我只要在一个sorter类里添加一个classname的参数,添加一个methodName的参数(类型为String[]),用一个for循环就有可能用一个sorter类为每个tableview加入排序的功能。
思考:其实这些sorter类都是差不多的,只是调用的javabean不同,方法名称不同,实现的原理,没有什么不同,那么该如何使用一个sorter类就可对所有的tableview进行排序呢?
思考结果:也许可以用Class类与Method类,也就是什么reflect机制。
困难:从来没用过reflect机制。
没有过,没关系。JDK5.0文档与google是我最好的老师。
下面就是我的成果了:
第一步,先建个javabean:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package test;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Model {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String
id;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String
name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String
description;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Model() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
id = "id";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
name = "name";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
description = "description";
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String
getId() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setId(String
id) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.id = id;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String
getName() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setName(String
name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.name = name;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String
getDescription() {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return description;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setDescription(String
description) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.description = description;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
第二步:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package test;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.InvocationTargetException;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.Method;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TestMethodReflect {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static final String
ID = "Id";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static final String
NAME = "Name";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static final String
DESCRIPTION = "Description";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//方法名集合
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static final String[]
ALL = { ID, NAME, DESCRIPTION };
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//这是测试数据
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static final String[]
MODELDATA = { "1", "Gavin",
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
"this
is model's test data" };
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[]
args) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Class
model = Class.forName("test.Model");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类的实例
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object
object = model.newInstance();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0;
i < ALL.length; i++) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类的set方法,参数为String类型
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Method
setMethod = model.getMethod("set" + ALL[i],
String.class);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//调用set方法
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
setMethod.invoke(object,
MODELDATA[i]);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//获得Model类的get方法,无参数
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Method
getMethod = model.getMethod("get" + ALL[i], null);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//调用get方法,并输出数据
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println(getMethod.invoke(object, null));
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (ClassNotFoundException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (SecurityException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (NoSuchMethodException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (IllegalArgumentException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (IllegalAccessException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InvocationTargetException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InstantiationException
e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO
Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
ok,大功告成!
成功后的思考:我只要在一个sorter类里添加一个classname的参数,添加一个methodName的参数(类型为String[]),用一个for循环就有可能用一个sorter类为每个tableview加入排序的功能。
相关文章推荐
- spring和java国际化资源文件加载顺序
- WSAD 如何修改JDK以使用jdk1.4
- [转]在Eclipse中使用JUnit4进行单元测试(中级篇)
- JNI的替代者—使用JNA访问Java外部功能接口
- java之类变量、成员变量、局部变量
- Java框架数据库连接池
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- Java异常的分类
- Java SE 6 新特性: Java DB 和 JDBC 4.0
- java.security.InvalidKeyException: Illegal key size
- Java SE 6 新特性: 对脚本语言的支持
- SpringMvc 返回值类型
- 自行集成极光推送所遇到的一个错误::java.lang.UnsatisfiedLinkError:
- Java--垃圾回收
- 【c3p0】目前使用它的开源项目有Hibernate,Spring等
- 如何在servlet取得spring beans (autowired)
- eclipse和NetBeans环境下运行JNA操作备忘
- 【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现
- 对于多线程两种方式的理解
- Java学习笔记-------使用DataOutputStream 、DataInputStream 组合实现C/S通信 :实例