用三个类来举例说明java动态代码实现方法
Spring的做法,基于接口的用proxy
普通接口类
package com.jamesby.proxy;
public interface CarCompany {
public void makeCar();
public void abc();
}
实现接口类
package com.jamesby.proxy;
public class CarCompanyImpl implements CarCompany {
public void makeCar() {
System.out.println("Company A make a car!");
abc();
}
public void abc()
{
System.out.println("abc is invoked!");
}
}
动态代理句柄
package com.jamesby.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class CarCompanyHandler implements InvocationHandler {
CarCompany com;
public CarCompanyHandler(CarCompany com) {
this.com = com;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("time1:" + System.currentTimeMillis());
method.invoke(this.com, new Object[]{});
System.out.println("time2:" + System.currentTimeMillis());
return null;
}
}
测试类
package com.jamesby.proxy;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] arg) {
CarCompanyImpl a = new CarCompanyImpl();
CarCompanyHandler handler = new CarCompanyHandler(a);
// 产生一个新的代理类
CarCompany com = (CarCompany) Proxy.newProxyInstance(Test.class
.getClassLoader(), new Class[] { CarCompany.class }, handler);
com.makeCar();
}
}
此时就可以实现代码
本文详细介绍了使用Java动态代码实现方法,特别是通过基于接口的代理技术来实现代理类的实现过程。包括普通接口类定义、接口类实现、动态代理句柄的创建与使用,以及测试类的实现,展示了如何通过反射机制动态生成代理类并调用接口方法。
5706

被折叠的 条评论
为什么被折叠?



