带你了解代理模式,java开发实例教程答案
2021/12/19 22:49:39
本文主要是介绍带你了解代理模式,java开发实例教程答案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
以下根据三种代理模式进行实现
公用代码:
PayService 支付接口
public interface PayService {
/**
- 支付方法
*/
public void pay();
}
支付接口实现类
/**
-
@Auther: heng
-
@Date: 2021/4/25 10:58
-
@Description: PayServiceImpl
-
@Version 1.0.0
*/
public class PayServiceImpl implements PayService {
/**
- 支付方法实现类
*/
@Override
public void pay() {
System.err.println(“这是一个支付接口…”);
}
}
静态代理实现代码
静态代理类StaticProxyService
/**
-
@Auther: heng
-
@Date: 2021/4/25 11:03
-
@Description: StaticProxyService 静态代理类
-
@Version 1.0.0
*/
public class StaticProxyService implements PayService {
private PayService payService;
public StaticProxyService(PayService payService) {
this.payService = payService;
}
@Override
public void pay() {
before();
payService.pay();
after();
}
public void before(){
System.err.println(“before执行方法前执行”);
}
public void after(){
System.err.println(“after执行方法后执行”);
}
}
Main方法测试
/**
-
@Auther: heng
-
@Date: 2021/4/25 11:14
-
@Description: ProxyMain
-
@Version 1.0.0
*/
public class ProxyMain {
public static void main(String[] args) {
PayService payService = new StaticProxyService(new PayServiceImpl());
payService.pay();
}
}
JDK动态代理方法实现需求(被代理类必须实现接口 否则会报未实现接口错误)
需要实现InvocationHandler
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
-
@Auther: heng
-
@Date: 2021/4/25 13:11
-
@Description: JdkInvocationHandler jdk动态代理
-
@Version 1.0.0
*/
public class PayInvocationHandler implements InvocationHandler {
public Object targerClass;
public PayInvocationHandler(Object targerClass) {
this.targerClass = targerClass;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
before();
Object result = method.invoke(targerClass, args);
after();
return result;
}
public void before(){
System.err.println(“before执行方法前执行”);
}
public void after(){
System.err.println(“after执行方法后执行”);
}
}
创建JdkProxy方法
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
/**
-
@Auther: heng
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
@Date: 2021/4/25 13:20
-
@Description: JdkProxy jdk动态代理类 执行
-
@Version 1.0.0
*/
public class JdkProxy {
public static T newProxyInstance(T targerClass, InvocationHandler invocationHandler){
ClassLoader classLoader = targerClass.getClass().getClassLoader();
Class<?>[] interfaces = targerClass.getClass().getInterfaces();
return (T) Proxy.newProxyInstance(classLoader,interfaces,invocationHandler);
}
}
Main测试代码
//jdk动态代理
PayService payService = new PayServiceImpl();
PayInvocationHandler payInvocationHandler = new PayInvocationHandler(payService);
PayService proxyPayService = JdkProxy.newProxyInstance(payService, payInvocationHandler);
proxyPayService.pay();
Cglib动态代理实现需求方法(可以代理实现接口的类和不实现接口的类)
需要引入cglib jar
cglib
cglib
3.2.9
需要实现MethodInterceptor
创建CglibInvocationHandler
这篇关于带你了解代理模式,java开发实例教程答案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程