Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例
更新時(shí)間:2017年06月09日 08:31:48 投稿:lqh
這篇文章主要介紹了 Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例的相關(guān)資料,需要的朋友可以參考下
Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例
Sample code :
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
public class ProxyTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
System.out.println(clazzProxy);
System.out.println("------constructor method list ------");
Constructor[] constructors = clazzProxy.getConstructors();
for(Constructor constructor:constructors){
StringBuilder sb = new StringBuilder(constructor.getName());
sb.append("(");
Type[] parameterTypes = constructor.getParameterTypes();
for(Type parameterType:parameterTypes){
sb.append(parameterType.toString()+",");
}
if(parameterTypes.length>0){
sb.deleteCharAt(sb.length()-1);
}
sb.append(")");
System.out.println(sb.toString());
}
System.out.println("------constructor method list ------\n\n");
System.out.println("------ method list ------");
Method[] methods = clazzProxy.getMethods();
for(Method method:methods){
StringBuilder sb2 = new StringBuilder(method.getName());
sb2.append("(");
Type[] parameterTypes = method.getParameterTypes();
for(Type parameterType:parameterTypes){
sb2.append(parameterType.toString()+",");
}
if(parameterTypes.length>0){
sb2.deleteCharAt(sb2.length()-1);
}
sb2.append(")");
System.out.println(sb2.toString());
}
System.out.println("------ method list ------");
Constructor proxyConstructor = clazzProxy.getConstructor(InvocationHandler.class);
class MyInvocationHandler implements InvocationHandler{
ArrayList target = new ArrayList();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = method.invoke(target, args);
return obj;
}
}
MyInvocationHandler mih = new MyInvocationHandler();
Collection collectionProxy = (Collection) proxyConstructor.newInstance(mih);
collectionProxy.add("zhuang");
collectionProxy.add("alex");
System.out.println("collectionProxy size:"+collectionProxy.size());
Collection collectionProxy2 = (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),new Class[] {Collection.class},new InvocationHandler(){
ArrayList target = new ArrayList();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = method.invoke(target, args);
return obj;
}
});
collectionProxy2.add("one");
collectionProxy2.add("two");
collectionProxy2.add("three");
System.out.println("collectionProxy2 size:"+collectionProxy2.size());
}
運(yùn)行結(jié)果:
class $Proxy0 ------constructor method list ------ $Proxy0(interface Java.lang.reflect.InvocationHandler) ------constructor method list ------ ------ method list ------ add(class java.lang.Object) hashCode() equals(class java.lang.Object) clear() toString() contains(class java.lang.Object) isEmpty() addAll(interface java.util.Collection) iterator() size() toArray(class [Ljava.lang.Object;) toArray() remove(class java.lang.Object) containsAll(interface java.util.Collection) removeAll(interface java.util.Collection) retainAll(interface java.util.Collection) isProxyClass(class java.lang.Class) getProxyClass(class java.lang.ClassLoader,class [Ljava.lang.Class;) newProxyInstance(class java.lang.ClassLoader,class [Ljava.lang.Class;,interface java.lang.reflect.InvocationHandler) getInvocationHandler(class java.lang.Object) wait() wait(long,int) wait(long) getClass() notify() notifyAll() ------ method list ------ collectionProxy size:2 collectionProxy2 size:3
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
您可能感興趣的文章:
- Java實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類操作示例
- Java動(dòng)態(tài)獲取實(shí)現(xiàn)某個(gè)接口下所有的實(shí)現(xiàn)類對(duì)象集合
- Java實(shí)現(xiàn)的properties文件動(dòng)態(tài)修改并自動(dòng)保存工具類
- java 利用java反射機(jī)制動(dòng)態(tài)加載類的簡單實(shí)現(xiàn)
- 詳解Java多態(tài)對(duì)象的類型轉(zhuǎn)換與動(dòng)態(tài)綁定
- Java動(dòng)態(tài)調(diào)用類中方法代碼
- 詳解Java Spring各種依賴注入注解的區(qū)別
- Java的Spring框架中bean的繼承與內(nèi)部bean的注入
- 詳解Java的MyBatis框架與Spring框架整合中的映射器注入
- Java 動(dòng)態(tài)生成類和實(shí)例, 并注入方法操作示例
相關(guān)文章
解決引用slf4j中Logger.info只打印出文字沒有數(shù)據(jù)的問題
這篇文章主要介紹了解決引用slf4j中Logger.info只打印出文字沒有數(shù)據(jù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
feignclient?https?接口調(diào)用報(bào)證書錯(cuò)誤的解決方案
這篇文章主要介紹了feignclient?https?接口調(diào)用報(bào)證書錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
spring boot 監(jiān)控處理方案實(shí)例詳解
這篇文章主要介紹了spring boot 監(jiān)控處理方案的相關(guān)資料,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
淺談java7增強(qiáng)的try語句關(guān)閉資源
下面小編就為大家?guī)硪黄獪\談java7增強(qiáng)的try語句關(guān)閉資源。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06

