博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java动态代理
阅读量:4589 次
发布时间:2019-06-09

本文共 1735 字,大约阅读时间需要 5 分钟。

首先我们定义一个接口

public interface SayService {    public void say();}

接着实现这个接口

public class SayImpl implements SayService {    @Override    public void say() {        System.out.println("I want to go shoping.");    }}

 

定义一个动态代理类了,每一个动态代理类都必须要实现 InvocationHandler 这个接口

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class DynamicProxy implements InvocationHandler {    //我们要代理的真实对象    private Object object;        public  DynamicProxy(Object object) {        this.object = object;    }        @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {                System.out.println("before go shoping");        //当代理对象调用真实对象的方法时,其会自动跳转到代理对象关联的handler对象的invoke方法进行调用        method.invoke(object, args);        System.out.println("after go shoping");        return null;    }}

 

定义测试方法

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class TestProxy {    public static void main(String[] args) {                //要代理的对象        SayService sayImpl = new SayImpl();                //要代理哪个对象,就要将改对象传进去,最后是通过其真实对象来调用方法的        InvocationHandler handler = new DynamicProxy(sayImpl);                //Proxy.newProxyInstance--创建代理对象        //handler.getClass().getClassLoader()---加载代理对象        //sayImpl.getClass().getInterfaces()--为代理对象提供的接口是真实对象所实现的接口,表示我们要代理的是改真实对象,这样我们就能调用接口中的方法        //handler-关联上的InvocationHandler这个对象        SayService sayService = (SayService)Proxy.newProxyInstance(handler.getClass().getClassLoader()                ,sayImpl.getClass().getInterfaces(), handler);        sayService.say();            }}

 

控制台打印的日志

before go shoping

I want to go shoping.
after go shoping

 

转载于:https://www.cnblogs.com/ts-sd/p/7351183.html

你可能感兴趣的文章
c# 调试过程
查看>>
c# 结构
查看>>
C# 中的异常处理
查看>>
c# 调试
查看>>
c# 使用序列化
查看>>
c# VS.NET 中的调试工具
查看>>
c# System.Array
查看>>
c# StringBuilder类
查看>>
c# 格式化数据String.Format
查看>>
c# 日期和时间System.DateTime
查看>>
c# 字符串修改
查看>>
c# 正则表达式
查看>>
c# Regex类
查看>>
c# Match类
查看>>
c# MatchCollection类
查看>>
c# Group类
查看>>
c# FileStream 类构造函数
查看>>
H3C 帧聚合
查看>>
H3C WLAN相关组织和标准
查看>>
H3C 802.11网络的基本元素
查看>>