zoukankan      html  css  js  c++  java
  • JDK动态代理例子

    JDK动态代理的代理类必须实现于接口。如果要代理类,则使用CGLIB代理。

    先定义一个接口:

    public interface Character {
        public void show();
    }

    接着定义一个类:

    public class A implements Character{
    
        @Override
        public void show() {
            // TODO Auto-generated method stub
            System.out.println("this is A");
        }
        
    }

    定义的代理类要实现InvocationHandler接口:

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    
    public class JdkProxy implements InvocationHandler{
        private Object delegate;
        public Object bind(Object delegate){
            this.delegate = delegate;
         //利用反射机制生成一个代理对象
    return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object result = null;
          System.out.println(
    "JdkProxy invoke");
         //此处是调用了目标类的方法,所以在该方法执行的前后可以插入其他的事务逻辑,并且可以更改传入的参数和返回的结果 result
    = method.invoke(delegate, args); return result; } }

    例子:

    public static void main(String[] args){
            Character c = (Character)((new JdkProxy()).bind(new A()));
            c.show();
        }

    打印的结果:

    JdkProxy invoke
    this is A
  • 相关阅读:
    hdu5289 RMQ+二分
    poj1459 最大流Dinic
    poj2391 最大流+拆点
    poj1087&&hdu1526 最大流
    NOI2004 郁闷的出纳员
    Treap入门(转自NOCOW)
    poj 2892
    vijos 1512
    对拍程序
    poj 3264
  • 原文地址:https://www.cnblogs.com/agindage/p/4684377.html
Copyright © 2011-2022 走看看