Java:是否可以在运行时将代理添加/附加到活动对象实例?

皮卡·苏卡(Pika Sucar)

我知道Java支持代理。我一直在检查Javassist,但不确定它是否可以支持以下技巧:

public class Hello {

    public void hi() {
        System.out.println("hi");
    }
}

Hello hello = new Hello();

Hello proxyHello = createProxy(hello);
proxyHello.hi(); // method will be intercepted by a predefined proxy

有可能做这样的事情吗?

尼古拉斯·菲洛托(Nicolas Filotto)

JDK中提供的功能仅允许创建实现一组接口的代理,如果您要创建的代理Class,则需要使用,Javassist但是要做到这一点,您需要一个可从该类访问的构造函数您在其中创建代理的位置。

这是一种实现您所需的方法:

final Hello hello = new Hello() {
    public void hi() {
        System.out.println("Hello World");
    }
};
ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(Hello.class);
MethodHandler handler = (self, m, proceed, args) -> {
    // This allows to proxy even non accessible methods, it could not be
    // needed depending on your context
    if (!m.isAccessible())
        m.setAccessible(true);
    return m.invoke(hello, args);
};
Hello proxy = (Hello)factory.create(new Class<?>[0], new Object[0], handler);
proxy.hi();

输出:

Hello World

在此示例中:

  1. 首先,我创建我的工厂
  2. 然后我提供超一流的
  3. 然后,我定义如何处理代理上的所有方法调用(在这里,我将所有事情都委派给我的活动对象)
  4. 最后,我创建了我的代理(在这里,我使用默认的构造函数来创建代理)。

此处有更多详细信息

假设您有一个带一个String参数的构造函数,则需要将最后一行修改为下一行:

Hello proxy = (Hello)factory.create(
    new Class<?>[]{String.class}, new Object[]{"bar"}, handler
);

在这里,我使用一个类型为实参的构造函数进行调用,String并将其bar作为值提供

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:是否可以在运行时将代理添加/附加到活动对象实例?

来自分类Dev

是否可以在运行时将可观察对象添加到CombineLatest(或类似方法)中?

来自分类Dev

是否可以在运行时将字符串添加到字符串池?

来自分类Dev

如何在运行时将属性附加到MOQ对象中

来自分类Dev

在运行时将半透明覆盖层添加到活动背景

来自分类Dev

在Swift中是否可以在运行时向对象添加变量?

来自分类Dev

在运行时将模块添加到python

来自分类Dev

在运行时将项目添加到ComboBox?

来自分类Dev

在运行时将后缀添加到枚举

来自分类Dev

在运行时将PictureBox添加到窗体

来自分类Dev

在运行时将片段添加到TabLayout

来自分类Dev

slf4j,在运行时更改记录器或添加附加程序

来自分类Dev

slf4j,在运行时更改记录器或添加附加程序

来自分类Dev

有什么方法可以在运行时使用Entity Framework Core(代码优先)将旧版本模型实例添加到数据库中吗?

来自分类Dev

在运行时将子报表添加到主报表(java)

来自分类Dev

是否可以在运行时将方法调用重定向到同一对象的另一个实例?

来自分类Dev

是否可以在运行时获取Java类的serialVersionUID

来自分类Dev

是否可以在运行时使用Java实现接口?

来自分类Dev

如何在运行时将Java自定义或字符串对象添加到DAO模型对象?

来自分类Dev

在运行时添加对象?

来自分类Dev

在运行时将div附加到html正文是相互重叠的

来自分类Dev

是否可以在运行时动态实例化DAO类?

来自分类Dev

如何知道事件是否在运行时附加

来自分类Dev

是否可以在运行时确定对象选择的情况下使用C ++对象组成?

来自分类Dev

可以在运行时填充 Android 活动吗?

来自分类Dev

节点可以在运行时添加到 HBox 吗?

来自分类Dev

如何访问在运行时添加到对象的属性?

来自分类Dev

如何在运行时添加到对象的未知List属性?

来自分类Dev

使用 Java 在活动中在运行时添加进程

Related 相关文章

  1. 1

    Java:是否可以在运行时将代理添加/附加到活动对象实例?

  2. 2

    是否可以在运行时将可观察对象添加到CombineLatest(或类似方法)中?

  3. 3

    是否可以在运行时将字符串添加到字符串池?

  4. 4

    如何在运行时将属性附加到MOQ对象中

  5. 5

    在运行时将半透明覆盖层添加到活动背景

  6. 6

    在Swift中是否可以在运行时向对象添加变量?

  7. 7

    在运行时将模块添加到python

  8. 8

    在运行时将项目添加到ComboBox?

  9. 9

    在运行时将后缀添加到枚举

  10. 10

    在运行时将PictureBox添加到窗体

  11. 11

    在运行时将片段添加到TabLayout

  12. 12

    slf4j,在运行时更改记录器或添加附加程序

  13. 13

    slf4j,在运行时更改记录器或添加附加程序

  14. 14

    有什么方法可以在运行时使用Entity Framework Core(代码优先)将旧版本模型实例添加到数据库中吗?

  15. 15

    在运行时将子报表添加到主报表(java)

  16. 16

    是否可以在运行时将方法调用重定向到同一对象的另一个实例?

  17. 17

    是否可以在运行时获取Java类的serialVersionUID

  18. 18

    是否可以在运行时使用Java实现接口?

  19. 19

    如何在运行时将Java自定义或字符串对象添加到DAO模型对象?

  20. 20

    在运行时添加对象?

  21. 21

    在运行时将div附加到html正文是相互重叠的

  22. 22

    是否可以在运行时动态实例化DAO类?

  23. 23

    如何知道事件是否在运行时附加

  24. 24

    是否可以在运行时确定对象选择的情况下使用C ++对象组成?

  25. 25

    可以在运行时填充 Android 活动吗?

  26. 26

    节点可以在运行时添加到 HBox 吗?

  27. 27

    如何访问在运行时添加到对象的属性?

  28. 28

    如何在运行时添加到对象的未知List属性?

  29. 29

    使用 Java 在活动中在运行时添加进程

热门标签

归档