您的位置:首页 > 编程语言 > Java开发

java反射机制example

2011-03-09 14:10 246 查看
interface XXX is not visible from class loader---(java反射机制)
2008-04-20 19:29

今天做了一个小程序,有关java反射机制的程序,做了6个*.java文件,分别是:

TargetInterface.java


package com.interceptor.test;

public interface TargetInterface {

public void doSomething();

}

Target.java


package com.interceptor.test;

public class Target implements TargetInterface {

public void doSomething() {

System.out.println("do something");

}

}

Interceptor.java


package com.interceptor.test;

public class Interceptor {

public void before(){

System.out.println("before");

}

public void after(){

System.out.println("after");

}

}

MyHandler.java


package com.interceptor.test;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler {

private Object object;

private Interceptor interceptor = new Interceptor();

public void setObject(Object object) {

this.object = object;

}

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

Object result = null;

interceptor.before();

result = method.invoke(object, args);

interceptor.after();

return result;

}

}

MyProxy.java


package com.interceptor.test;

import java.lang.reflect.Proxy;

public class MyProxy {

public Object getProxy(Object object){

MyHandler myHandler = new MyHandler();

myHandler.setObject(object);

return Proxy.newProxyInstance(Object
.class.getClassLoader(), object.getClass().getInterfaces(), myHandler);//Target.class.getClassLoader();而非Object

}

}

Client.java


package com.interceptor.test;

public class Client {

public static void main(String[] args) {

TargetInterface target = new Target();

MyProxy myProxy = new MyProxy();

TargetInterface proxy = (TargetInterface) myProxy.getProxy(target);

proxy.doSomething();

}

}

运行client.java时,抛出这样一个异常

"main" java.lang.IllegalArgumentException: interface com.interceptor.test.TargetInterface is not visible from class loader

at java.lang.reflect.Proxy.getProxyClass(Unknown Source)

at java.lang.reflect.Proxy.newProxyInstance(Unknown Source)

at com.interceptor.test.MyProxy.getProxy(MyProxy.java:9)

at com.interceptor.test.Client.main(Client.java:7)

经过调试,发现在MyProxy.java
中的Object,应改为Target,才好使。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: