动态代理(java模拟生活中的代理)

本文介绍了Java中的动态代理机制,包括代理的概念、实现步骤以及实际应用案例。通过创建一个明星类和技能接口,展示了如何使用Proxy类生成代理对象,代理对象在调用方法前后可以进行额外的操作,如模拟明星演出前后的收款过程。
摘要由CSDN通过智能技术生成

1什么是代理?

代理指:某些场景下对象会找一个代理对象,来辅助自己完成一些工作:如歌星(经纪人),买房的人(房产中介);

代理主要是对对象的行为额外做一些辅助操作

2Java中实现动态代理的步骤是什么样的?

必须存在接口

被代理对象需要实现接口

使用Porxy类提供的方法,得到对象的代理对象

public static Object newProxyInstance(ClassLoader  loader ,Class<?>[]  interface,InvocationHandler h)

为被代理对象返回一个代理对象

参数1:类加载器,加载代理类,产生代理对象

参数2:真实业务对象的接口(被代理的方法交给代理对象)

参数3:代理的核心处理程序

模拟一些明星的代理,用java实现

创建技能接口

package 动态代理;

/**
 * 技能接口
 */
public interface Skill {
	void sing();//唱歌
	void dance(); //跳舞

}

创建明星类

package 动态代理;

/**
 * 明星类
 */
public class Star  implements Skill{
	private String name;
	public Star(String name) {
		this.name=name;
	}

	@Override
	public void sing() {
		// TODO Auto-generated method stub
		System.out.println(name+"正在唱歌");
		
	}

	@Override
	public void dance() {
		// TODO Auto-generated method stub
		System.out.println(name+"正在跳舞");
		
	}
	

}

创建代理方法类

package 动态代理;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class SkillPorxy {
	public  static Skill getProxy(Star object) {
		//生成一个代理对象
		return (Skill) Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(),new InvocationHandler() {
			
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				// method是正在调用的方法, args 为参数
				System.out.println("收首付款。。。。。。。。。");
				Object rs=  method.invoke(object, args);  
				System.out.println("收尾款。。。。。。。");
				return  rs;
			}
		});
		
	}

}

测试一下

package 动态代理;

public class Test {
	public static void main(String[] args) {
		//创建个明星对象
		Star s1=new Star("周杰伦");
		//生成代理对象
		Skill ss1=SkillPorxy.getProxy(s1);
		ss1.sing();
		ss1.dance();
		
	}
	
	
	

}

最后输出的内容为:

收首付款。。。。。。。。。
周杰伦正在唱歌
收尾款。。。。。。。
收首付款。。。。。。。。。
周杰伦正在跳舞
收尾款。。。。。。。 

3通过代理对象调用方法,执行流程是什么样的?

先走向代理

代理可以为方法额外做一些辅助工作

开发真正触发对象的方法的执行

回到代理中,由代理负责返回结果给方法的调用者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值