Jdk dynamic proxy 2

There is a fatal flaw based on dynamic agent (jdk dynamic proxy) interface, it is to be proxy object must implement an interface, or can not achieve dynamic proxy. To understand the general object of such agents can also be, leads to the dynamic proxy subclasses based on:

cglib dynamic proxy

step:

  • Create a maven project, import dependence
	  <dependencies>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.1_3</version>
        </dependency>
    </dependencies>
  • Producer class (general class proxied)
package cglib;

/**
 * Code by langlang on 2020/3/27
 */
public class Producer {
    public void produce() {
        System.out.println("生产商品");
    }

    public void sell(Float money) {
        System.out.println("销售赚了"+money);
    }
}

  • cglib main class
package cglib;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * Code by langlang on 2020/3/27
 */
public class CglibTest {

    public static void main(String[] args) {
        final Producer producer = new Producer();
        Producer producerCglib = (Producer) Enhancer.create(producer.getClass(), new MethodInterceptor() {
            /**
             * @Description:
             *
             * @auther: langlang
             * @date: 21:44 2020/3/27
             * @param: [o, method, objects, methodProxy]
             *
             * methodProxy是callback的实现类,是当前执行方法的代理对象
             * @return: java.lang.Object
             */

            Object resultValue = null;

            public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                if (method.getName() == "sell") {
                    Float money = (Float) args[0];
                    Object resultValue = method.invoke(producer, money * 0.8f);
                }
                return resultValue;
            }
        });
        producerCglib.sell((float) 1000);
    }
}

Published 74 original articles · won praise 2 · Views 6450

Guess you like

Origin blog.csdn.net/weixin_42067668/article/details/105151312