详解Proxy.newProxyInstance

AOP是Spring框架比较重要模块,在面试中几乎是百分百的被问到,但是很多的面试者都是只能简答的描述应用,要问到真正的原理实现大多数面试者一脸懵逼。我也被多次问道过基本上回答的都不是太好,于是下定决心弄懂它,于是查看了很多的技术博客看了很多的视频,也算马马虎虎的懂了推荐技术大神的篇文章希望对看到的朋友有所帮助https://my.oschina.net/u/2264912/blog/1592613

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`Proxy.newProxyInstance` 是 Java 中的一个方法,用于创建一个动态代理对象。它接受三个参数:一个类加载器,一个接口数组和一个 `InvocationHandler` 对象。动态代理对象可以在运行时动态地创建一个实现指定接口的代理类,并将方法调用委托给 `InvocationHandler` 来处理。 使用 `Proxy.newProxyInstance` 可以实现一些横切关注点(cross-cutting concerns)的功能,比如日志记录、性能监控、事务管理等。通过动态代理,可以在不修改原始类代码的情况下,为其增加额外的行为。 以下是一个简单的示例代码,演示如何使用 `Proxy.newProxyInstance` 创建一个动态代理对象: ```java public interface Foo { void bar(); } public class RealFoo implements Foo { @Override public void bar() { System.out.println("RealFoo: executing bar()"); } } public class LoggingHandler implements InvocationHandler { private final Object target; public LoggingHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Before method: " + method.getName()); Object result = method.invoke(target, args); System.out.println("After method: " + method.getName()); return result; } } public class Main { public static void main(String[] args) { Foo realFoo = new RealFoo(); InvocationHandler handler = new LoggingHandler(realFoo); Foo proxy = (Foo) Proxy.newProxyInstance( Foo.class.getClassLoader(), new Class[]{Foo.class}, handler); proxy.bar(); // 通过代理对象调用方法 } } ``` 运行上述代码,将会在控制台输出以下内容: ``` Before method: bar RealFoo: executing bar() After method: bar ``` 这说明 `LoggingHandler` 在方法调用前后添加了额外的日志输出行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值