java 動態代理簡單使用

hgs19921112發表於2018-08-18
//---------------介面
package reflect_test;
public interface Animals {
public String scrime(String str); 
}
//
--------------類
package reflect_test;
public class Dog implements Animals {
    private  int age =100;
    private  String xstr="test...";
    public  int page = 100000;
private  Dog(String xstr) {
    this.xstr = xstr;
    }
    public Dog() {
    }
    public Dog(int age) {
    this.age = age;
    }
@Override
public String scrime(String str) {
return str;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private   int  getAddAge() {
return age+=10;
}
public void getXstr() {
System.out.println(xstr);
}
}
-------------代理類
package reflect_test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.junit.Before;
import org.junit.Test;
public class ProxyTest {
@Test
public void testProxy() throws Exception {
Class<?> clazz =  Class.forName("reflect_test.Dog");
Class<?>[] interfa = {Class.forName("reflect_test.Animals")};
Animals am = (Animals)Proxy.newProxyInstance(clazz.getClassLoader(), interfa, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String str = (String)method.invoke(new Dog(), args);
return str + "\n append by proxy !";
}
});
System.out.println(am.scrime("normal scriming....."));
}
}



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2200330/,如需轉載,請註明出處,否則將追究法律責任。

相關文章