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动态代理的实现。

  • 相关阅读:
    (一)类数组对象NodeList
    childNodes遍历DOM节点树
    innerText兼容问题处理
    JS中定义对象的几种方式
    javaScript中闭包的工作原理
    输出一组数字中的最小数
    HttpServletResponse对象
    Web.xml过滤器配置及执行顺序概念
    pageContext对象的用法详述
    请求转发与请求重定向
  • 原文地址:https://www.cnblogs.com/liushijie/p/4712922.html
Copyright © 2011-2022 走看看