• java动态代理


    1. 创建一个接口

    public interface UserService {
        void save();
        void delete();
        void update();
        void find();
    }

    2.创建一个接口的实现类

    public class UserServiceImpl implements UserService {
        @Override
        public void save() {
            System.out.println("保存用户!");
            //int i = 1/0;
        }
        @Override
        public void delete() {
            System.out.println("删除用户!");
        }
        @Override
        public void update() {
            System.out.println("更新用户!");
        }
        @Override
        public void find() {
            System.out.println("查找用户!");
        }
    }

    介绍下为什么要使用动态代理.因为接口实现类中,这4个方法都执行的时候 想调用同一个方法.但是写4次就有点不符合设计.

    所以使用动态代理 只写一次就可以了

    3.创建动态代理的类

    public class UserServiceProxyFactory implements InvocationHandler {
        
        public UserServiceProxyFactory(UserService us) {
            super();
            this.us = us;
        }
    
        private UserService us;
        
        public UserService getUserServiceProxy(){
            //生成动态代理
            UserService usProxy = (UserService) Proxy.newProxyInstance(UserServiceProxyFactory.class.getClassLoader(),
                                        UserServiceImpl.class.getInterfaces(), 
                                        this);
            //返回
            return usProxy;
            
        }
    
        @Override
        public Object invoke(Object arg0, Method method, Object[] arg2) throws Throwable {
            System.out.println("打开事务!");
            Object invoke = method.invoke(us, arg2);
            System.out.println("提交事务!");
            return invoke;
        }
    
    }

    4.测试动态代理

    @Test
        //动态代理
        public void fun1(){
            UserService us = new UserServiceImpl();
            
            UserServiceProxyFactory factory = new UserServiceProxyFactory(us);
            
            UserService usProxy = factory.getUserServiceProxy();
            
            usProxy.save();
            
            //代理对象与被代理对象实现了相同的接口
            //代理对象 与 被代理对象没有继承关系
            System.out.println(usProxy instanceof UserServiceImpl );//false
        }
  • 相关阅读:
    Silverlight开发“慢”游美丽的分形世界(画分形2)
    c#进阶methods中3explicit和implicit
    C#进阶可选参数和命名参数
    Silverlight杂记自定义loading
    c#进阶params可变个数的参数
    Abundant Resources
    欧拉函数
    容斥原理 讲解
    sdut 2497 A simple problem (并查集 or dfs)
    hdu 4366 Card Collector (容斥原理)
  • 原文地址:https://www.cnblogs.com/wwcherish/p/8649454.html
Copyright © 2020-2023  润新知