zoukankan      html  css  js  c++  java
  • 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
        }
  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/wwcherish/p/8649454.html
Copyright © 2011-2022 走看看