JAVA代理模式梳理(2),面试题+笔记+项目实战

本文深入解析JAVA动态代理,包括JDK和CGLIB动态代理的实现方式,探讨静态代理的局限性,并通过代码示例展示动态代理如何在不修改原代码的情况下增加功能。此外,还分享了作者的学习经历和网络安全资源。
摘要由CSDN通过智能技术生成

public String getMemberInfo() {
System.out.println(“获取用户信息”);
return “用户信息”;
}
}

public class MemberServiceProxy implements MemberService {
private MemberService target;
public MemberServiceProxy(MemberService target) {
this.target = target;
}
@Override
public String login(String username, Stringpassword) {
long start =System.currentTimeMillis();
String result = target.login(username,password);
long end = System.currentTimeMillis();
System.out.println(“登录耗时:” + (end -start) + “ms”);
return result;
}
@Override
public void logout() {
target.logout();
}
@Override
public String getMemberInfo() {
return target.getMemberInfo();
}
}

public class Test {
public static void main(String[] args) {
MemberServiceProxy proxy = new MemberServiceProxy(new MemberServiceImpl());
proxy.login(“123456”, “123456”);
}
}

这种静态代理的方式可以让你在不修改原始服务类的情况下,添加一些额外的功能,这样看起来还是比较好用的,但是呢,这种方式还是有一定的缺点,假如说你想给服务里其他接口也添加这个统计耗时的功能,你想给其他服务的接口也添加这个功能,那是不是

  1. 就需要增加类的数量:每个需要代理的类都需要一个对应的代理类。当你有成百上千个服务的时候,代码就会变得非常复杂,维护这成百上千个代理类也会变得困难。
  2. 这种方式也不够灵活:因为静态代理模式是编译时确定的,那就意味着在编译的时候就需要知道代理的具体类型。如果需要在运行时决定使用哪个代理,静态代理就很难做到了。
  3. 这样做维护成本是非常高的:如果我原始类的接口发生变化,代理类也需要相应地更改。这就会导致大量的代理类需要维护。所以,我们可以考虑一个更好的方式来做,就是动态代理。
动态代理

动态代理,实现方式有两种:基于 JDK 的动态代理和基于CGLIB 的动态代理。

静态代理的那个代理类是我们要自己写的,如果有一万个serviceÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值