zoukankan      html  css  js  c++  java
  • java 代理模式(静态代理+动态代理)

    静态代理:

    ISubject:

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午1:49:29
     */
    public interface ISubject {
        public void request();
    }

    RealSubject(真实角色):

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午1:51:37
     */
    public class RealSubject implements ISubject{
    
        @Override
        public void request() {
            System.out.println("realSubject requesting");
        }
    }

    ProxySubject(代理类):

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午1:52:22
     */
    public class ProxySubject implements ISubject{
        private RealSubject realSubject;
        public ProxySubject() {
            realSubject = new RealSubject();
        }
    
        @Override
        public void request() {
            System.out.println("do something before");
            realSubject.request();
            System.out.println("do something after");
        }
    }

    Test(客户端测试):

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午1:54:47
     */
    public class Test {
        public static void main(String[] args) {
            ISubject proxySubject = new ProxySubject();
            proxySubject.request();
        }
    }

    ------------------------------------------------------------------------------------------------------------------------------

    动态代理:

    ISubject:

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午2:51:31
     */
    public interface ISubject {
        public void request();
    }

    RealSubject:

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午2:52:00
     */
    public class RealSubject implements ISubject{
    
        @Override
        public void request() {
            System.out.println("realSubject requesting");
        }
    }

    SubjectInvocationHandler(调用处理类):

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午2:54:38
     * 调用处理类
     */
    public class SubjectInvocationHandler implements InvocationHandler{
        private Object obj;
        
        public SubjectInvocationHandler(Object obj) {
            this.obj = obj;
        }
        
        /**
         * 生成代理类工厂
         * @author com.tiantian
         * @param realObj
         * @return 返回生成的代理类
         */
        public static Object getProxyInstanceFactory(Object realObj){
            Class<?> classType = realObj.getClass();
            return Proxy.newProxyInstance(classType.getClassLoader(), 
                    classType.getInterfaces(), new SubjectInvocationHandler(realObj));
        }
        
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            System.out.println("before");
            
            method.invoke(obj, args);
            
            System.out.println("after");
            
            return null;
        }
    }

    Test:

    /**
     * @author com.tiantian
     * @version 创建时间:2012-11-20 下午2:56:25
     */
    public class Test {
        public static void main(String[] args) {
            RealSubject realSubject = new RealSubject();
    //        InvocationHandler handler = new SubjectInvocationHandler(realSubject);
    //        ISubject subject = (ISubject)Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),
    //                realSubject.getClass().getInterfaces(), handler);
            ISubject subject = (ISubject)SubjectInvocationHandler.getProxyInstanceFactory(realSubject);
            subject.request();
            
        }
    }
  • 相关阅读:
    org.apache.commons.net.ftp
    java中的匿名内部类总结
    有关JVM处理Java数组方法的思考
    使用myeclipse创建带注解的model实体类
    Maven导出Project依赖的jar包
    annotation-config, annotation-driven, compont-scan 区别
    hibernate annotation注解方式来处理映射关系
    关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
    Hibernate批量操作(二)
    Hibernate批量操作(一)
  • 原文地址:https://www.cnblogs.com/tiantianbyconan/p/2779095.html
Copyright © 2011-2022 走看看