带你了解代理模式,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开发实例教程答案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程