2025年java静动态代理三个角色扮演介绍明明白白——代理类 被代理类 被代理类接口

java静动态代理三个角色扮演介绍明明白白——代理类 被代理类 被代理类接口静态代理 1 被代理类接口 package agent pakstatic public interface SendServer void sendEmail 2 被代理类 业务接口实现类 package agent pakstatic public class SendEmail

大家好,我是讯享网,很高兴认识大家。

静态代理:

1、被代理类接口

package agent.pakstatic; public interface SendServer { void sendEmail(); } 

讯享网

2、被代理类(业务接口实现类)

讯享网package agent.pakstatic; public class SendEmail implements SendServer{ @Override public void sendEmail() { System.out.println("发送邮件成功!"); } } 

3、代理类

package agent.pakstatic; public class SendEmail implements SendServer{ private final SendServer sendServer = new SendEmail(); @Override public void sendEmail() { System.out.println("发送邮件。。。"); sendServer.sendEmail(); System.out.println("发送邮件。。。成功!"); } } 

4、main主函数测试类

讯享网package agent.pakstatic; public class Main { public static void main(String[] args) { new SendEmail().sendEmail(); } } 

运行结果:


讯享网

动态代理:

1、被代理类接口

package agent.dynamic; public interface PayServer { void payMoney(); } 

2、接口实现类(被代理类)

讯享网package agent.dynamic; public class PayZFB implements PayServer{ @Override public void payMoney() { System.out.println("支付宝付款成功!"); } } 

3、动态代理实现类(代理类) 

package agent.dynamic; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ProxyHandler implements InvocationHandler { private Object object; public ProxyHandler(Object object){ this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(""+method.getName()); Object invoke = method.invoke(object,args); System.out.println(""+method.getName()); return invoke; } } 

 4、main主函数测试类

讯享网package agent.dynamic; import agent.pakstatic.SendEmail; import agent.pakstatic.SendServer; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class Main { public static void main(String[] args) { SendServer send = new SendEmail(); PayServer pay = new PayZFB(); InvocationHandler sendHandler = new ProxyHandler(send); InvocationHandler payHandler = new ProxyHandler(pay); SendServer sendServer = (SendServer) Proxy.newProxyInstance(send.getClass().getClassLoader(),send.getClass().getInterfaces(),sendHandler); sendServer.sendEmail(); PayServer payServer = (PayServer) Proxy.newProxyInstance(pay.getClass().getClassLoader(),pay.getClass().getInterfaces(),payHandler); payServer.payMoney(); } }

运行结果:

小讯
上一篇 2025-04-05 10:46
下一篇 2025-03-10 17:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/22655.html