☛jdk和cblib动态代理代码参考
1:这是cglib动态代理的代码参考
package cglibPro;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
class UserServiceImpl{ //需要被代理的目标类
public void add(){
System.out.println("add...");
}
}
//获取代理类
class CglibProxy implements MethodInterceptor{
//
// private Enhancer enhancer = new Enhancer();
// public Object getProxy(Class clazz){
// //设置需要创建子类的类
// enhancer.setSuperclass(clazz);
// enhancer.setCallback(this);
// //通过字节码技术动态创建子类实例
// return enhancer.create();
// }
//
private Enhancer enhancer=new Enhancer();
public Object getObjectProxy(Class clazz){
enhancer.setSuperclass(clazz);//这个类本身也可以作为父类
enhancer.setCallback(this);
return enhancer.create();//创建子类,其实是增强类
}
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2,
MethodProxy proxy) throws Throwable {
System.out.println("开始进行添加之前!!");
Object obj=proxy.invokeSuper(arg0, arg2);//开始调用
System.out.println("开始进行添加之前后!!");
return obj;
}
}
public class CglibTest {
public static void main(String[] args) {
//使用代理类
CglibProxy cglib=new CglibProxy();
UserServiceImpl obj=(UserServiceImpl) cglib.getObjectProxy(UserServiceImpl.class);
obj.add();
}
}
2:这是jdk动态代理代码参考
package dynamic;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface UserService{
void add();
}
class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("addd...");
}
}
//动态代理类
class MyInvocationHandler implements InvocationHandler{
//目标类
private Object target;
public MyInvocationHandler(Object target) {
this.target=target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("target之前的操作");
Object obj=method.invoke(target, args);//方法的返回值
System.out.println("target之后的操作");
return obj;
}
}
public class DynamicTest {
public static void main(String[] args) {
UserService userService=new UserServiceImpl();
MyInvocationHandler mi=new MyInvocationHandler(userService);
//使用Proxy进行增强类的功能
UserService us=(UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), mi);
us.add();
}
}