zoukankan      html  css  js  c++  java
  • 基于子类的动态代理

    Producer类

    /**
     * @author rui
     */
    public class Producer {
        public void saleProduct(Float money) {
            System.out.println("共" + money + "元");
        }
        public void afterProduct(Float money) {
            System.out.println("售后共" + money + "元");
        }
    }
    

    增强方法测试类

    package cn.ytmj.test;
    
    import net.sf.cglib.proxy.Enhancer;
    import net.sf.cglib.proxy.MethodInterceptor;
    import net.sf.cglib.proxy.MethodProxy;
    
    import java.lang.reflect.Method;
    /**
     * 基于子类的动态代理
     *
     * @author rui
     */
    public class Test {
        public static void main(String[] args) {
            final Producer producer = new Producer();
            /**
             *Callback:用于提供增强的代码
             *      一般使用改接口的子接口实现类MethodInterceptor
             */
            Producer producer1 = (Producer) Enhancer.create(producer.getClass(), new MethodInterceptor() {
                /**
                 *
                 * @param o             增强对象
                 * @param method        增强的方法
                 * @param objects       参数值
                 * @param methodProxy   当前执行方法的执行对象
                 * @return
                 * @throws Throwable
                 */
                public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                    //增强的代码
                    Object o1 = null;
                    Float money = (Float) objects[0];
                    if ("saleProduct".equals(method.getName())) {
                        money = money * 0.8f;        //增强
                        o1 = method.invoke(producer, money);
                    }
                    return o1;
                }
            });
            producer1.saleProduct(1000F);
        }
    }
    
    

    maven 在pom.xml中加入

            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>3.3.0</version>
            </dependency>
    
  • 相关阅读:
    循环队列操作
    让测试人员参与软件设计
    Oracle之初探
    关注LoadRunner脚本回放日志中的Warning信息
    性能测试工具CurlLoader
    『原创』网站测试计划模板
    LoadRunner如何监控Linux下的系统资源
    搭建Linux学习环境安装CentOS5.4
    Linux下搭建Tomcat服务器
    性能测试分析之带宽瓶颈的疑惑
  • 原文地址:https://www.cnblogs.com/PoetryAndYou/p/11517416.html
Copyright © 2011-2022 走看看