package jdkdynamic;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Properties;
/**
 * 简单的说一下,代理模式就是再接口和实现类之前加一层,用于剥离接口的一些额外的操作
 * @author 123456
 *
 */
public class MyProxy {

public interface Hello{
void sayHello();
}
static class MyHello implements Hello{
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("hello world");
}
}
//自定义invocationHandler代理类
static 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("===插入前置通知代码====");
//执行相应的目标方法
Object invoke = method.invoke(target, args);
System.out.println("===插入后置通知代码====");
return invoke;
}
}
public static void main(String[] args) {
//生成$Proxy的class文件
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", true);
Hello hello=(Hello) Proxy.newProxyInstance(Hello.class.getClassLoader(), new Class[] {Hello.class},  new MyInvocationHandler(new MyHello()));//自定义的invocationHandler
hello.sayHello();
}
/**
* 动态代理使用步骤:
* 1.通过实现InvocationHandler接口来定义自己的MyInvocationHandler

* 2通过Proxy.getProxyClass获得动态代理类

                JAVA的动态代理这里是获取代理类得class type


* 3通过反射机制获取代理类的构造方法,方法签名为getConstructor(InvocationHandler.class)

* 4通过构造函数获得代理对象并将自定义得InvacationHandler实例对象作为参数传入

* 5通过代理对象调用目标方法
*/
 

}

 

 

JAVA的动态代理

 

JAVA的动态代理

 

JAVA的动态代理

 

JAVA的动态代理

 

JAVA的动态代理

 

JAVA的动态代理

 

JAVA的动态代理

相关文章:

  • 2021-12-03
  • 2022-01-20
  • 2021-06-28
猜你喜欢
  • 2021-11-22
  • 2021-06-24
  • 2022-02-09
  • 2022-01-03
  • 2022-01-20
相关资源
相似解决方案