zoukankan      html  css  js  c++  java
  • Java动态代理

    Java动态代理使用接口进行代理。不直接实例化目标类,而是通过动态代理类生成,这样在这个动态代理中调用目标类的时候就可以在方法前后调用逻辑。

    代码如下:

    1、创建基本实现类和实现接口:

    public interface IHelloWorld {
        public void sayHello();
    }
    public class HelloWorld implements IHelloWorld{
    
        @Override
        public void sayHello() {
            System.out.println("Hello World!");
        }
    
    }

    2、创建动态代理类:

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class HelloWorldProxy<T> implements InvocationHandler{
        T target = null;
        @SuppressWarnings("unchecked")
        public T bind(T target) {
            this.target = target;
            return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        }
        
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            this.doBefore();
            T result = (T) method.invoke(target, args);
            this.doAfter();
            return result;
        }
    
        private void doBefore() {
            System.out.println("start...");
            
        }
    
        private void doAfter() {
            System.out.println("end...");
        }
    }


    3、测试:

    public class HelloWorldTest {
        public static void main(String[] args) {
            HelloWorldProxy<IHelloWorld> proxy = new HelloWorldProxy<IHelloWorld>();
            IHelloWorld helloWorld = proxy.bind(new HelloWorld());
            helloWorld.sayHello();
        }
    }
     

    4、结果输出: 

    start...
    Hello World!
    end...

    5、其他:

    Jdk自动动态代理的实现必须代理接口,当需要代理具体实现类时候需要使用Cglib,在Spring AOP中提供JDK动态代理和cglib动态代理的实现。

  • 相关阅读:
    伪多项式时间 Pseudo-polynomial time
    Aho-Corasick算法
    写给十八岁以下的你
    网络流算法
    Java static关键字
    带有负权边的最短路径问题
    Miller_Rabin(米勒拉宾)素数测试
    关于同余与模运算的总结
    UVa1585
    UVa修改版02
  • 原文地址:https://www.cnblogs.com/liushijie/p/4712922.html
Copyright © 2011-2022 走看看