• 代理模式---动态代理之JDK


    接口类UserDao:

    package com.ant.jdk8.proxy;
    
    public interface UserDao {
        void save();
    }

    接口类EmployeeDao:

    package com.ant.jdk8.proxy;
    
    public interface EmployeeDao {
        void add();
    }

    目标类UserDaoImpl:

    package com.ant.jdk8.proxy;
    
    public class UserDaoImpl implements UserDao {
        @Override
        public void save() {
            System.out.println("保存用户");
        }
    }

    目标类EmployeeDaoImpl:

    package com.ant.jdk8.proxy;
    
    public class EmployeeDaoImpl implements EmployeeDao {
        @Override
        public void add() {
            System.out.println("添加雇员信息");
        }
    }

    代理类ProxyFactory

    package com.ant.jdk8.proxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class ProxyFactory {
    
        //维护一个目标对象
        private Object target;
    
        public ProxyFactory(Object target){
            this.target = target;
        }
    
        //生成目标对象的代理对象
        public Object getProxyInstance(){
            return Proxy.newProxyInstance(
                    target.getClass().getClassLoader(),
                    target.getClass().getInterfaces(),
                    new InvocationHandler(){
                        @Override
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                            System.out.println("---开始事务---");
                            Object object = method.invoke(target, args);
                            System.out.println("---提交事务---");
                            return object;
                        }
                    });
        }
    }

    测试类APP:

    package com.ant.jdk8.proxy;
    
    public class App {
        public static void main(String[] args) {
            //目标对象
            UserDao target = new UserDaoImpl();
            //代理对象
            UserDao proxy = (UserDao) new ProxyFactory(target).getProxyInstance();
            proxy.save();
    
            System.out.println("==========================");
    
            //目标对象
            EmployeeDao target2 = new EmployeeDaoImpl();
            //代理对象
            EmployeeDao proxy2 = (EmployeeDao)new ProxyFactory(target2).getProxyInstance();
            proxy2.add();
        }
    }
    

    JDK动态代理总结:

    代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理。

  • 相关阅读:
    4.比赛F
    4.M
    4.H
    4.J
    4.G
    4.D
    4.C
    UVA 215 Spreadsheet Calculator (模拟)
    POJ 3469 Dual Core CPU(最小割模型的建立)
    POJ 3281 Dining(网络流最大匹配)
  • 原文地址:https://www.cnblogs.com/i-hard-working/p/10389612.html
Copyright © 2020-2023  润新知