java中动态代理Proxy简单实现
2020-03-29 13:00
316 查看
创建一个接口,如果实现类进行方法增强没有将会报如下错误
接口
/** * 对生产厂家的要求 */ public interface IProducer { /** * 销售 * @param money */ public void saleProduct(float money); /** * 售后 * @param money */ public void afterService(float money); }
实现接口的类
public class Producer { /** * 销售 * @param money */ // @Override public void saleProduct(float money) { System.out.println("销售产品:并拿到钱"+money); } /** * 售后 * @param money */ // @Override public void afterService(float money){ System.out.println("提供售后,并拿到钱"+money); } }
测试类并在此类中使用动态代理增加之前方法
/** * 模拟一个消费者 * @author DELL */ public class Client { public static void main(String[] args) { final Producer producer = new Producer(); // producer.saleProduct(10000f); /** * newProxyInstance方法的参数: * ClassLoader:类加载器 * 它是用于加载代理对象字节码的,和被代理对象使用相同的类加载器 * class[] 字节码数组 * 它是用于代理对象和被代理对象的相同方法, * InvocationHandler 用于提供增强的代码 */ IProducer proxyProducer = (IProducer) Proxy.newProxyInstance(producer.getClass().getClassLoader(), producer.getClass().getInterfaces(), new InvocationHandler() { /** * * @param proxy 代理对象的引用 * @param method 当前执行的方法 * @param args 当前执行方法所需的参数 * @return 和被代理对象方法有相同的返回值 * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //提供增强的代码 Object returnValue = null; //1.获取方法执行的参数 Float money = (Float)args[0]; if("saleProduct".equals(method.getName())){ returnValue = method.invoke(producer, money*0.8f); } return returnValue; } }); proxyProducer.saleProduct(10000f); } }
这些类可以理解销售商和生产商的关系,定义了一个销售和售后的规范
实现类去实现,但是现在在不改动源码的情况下对money进行*0.8的操作(可用理解为销售商要在钱上收取20%)
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- JAVAProxy代理模式简单实现
- 通过动态代理(Proxy)实现的数据库连接池的创建连接与归还链接的操作的简单的实现流程
- java动态代理实现Proxy和InvocationHandler cglib
- Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理
- Proxy实现java动态代理
- JAVA动态代理 和 Spring AOP 4种通知的简单实现
- Java动态代理简单实现
- java实现简单的动态代理
- java的动态代理,jdk动态代理,一个Sping AOP的简单实现
- Java动态代理之JDK实现和CGlib实现(简单易懂)
- java之动态代理简单实现
- Java反射之JDK动态代理实现简单AOP
- Java反射之JDK动态代理实现简单AOP
- Java动态代理实现(简单AOP实现)
- Proxy实现java动态代理
- JAVA动态代理 和 Spring AOP 4种通知的简单实现
- JAVA 动态代理(proxy)的实现和源码分析
- Java动态代理之JDK实现和CGlib实现(简单易懂)
- 使用Java的Proxy类实现动态代理(Dynamic Proxy)
- JAVA动态代理实现 Proxy InvocationHandler