当前位置: 首页 > 面试题库 >

在运行时将新方法和属性注入类

勾通
2023-03-14
问题内容

有什么方法可以在运行时将新的方法和属性注入到类中。

http://nurkiewicz.blogspot.com/2009/09/injecting-methods-at-runtime-to-
java.html
指出我们可以使用Groovy做到这一点。

仅使用Java就能做到吗?


问题答案:

仅使用Java就能做到吗?

简单的答案是强调“您不想这样做!”。

从技术上讲,这是可能的,但并非没有采取极其复杂,昂贵且易碎的技巧,例如字节码修改1。即使这样,您也必须依靠动态加载来访问修改后的类型,并(可能)使用反射来利用其新成员。简而言之,您将为自己制造很多痛苦,几乎没有收获。

Java是一种静态类型的语言,添加/修改类类型签名可能会破坏类的静态类型协定。

1-AspectJ之类的东西允许您向类中注入其他行为,但是可能不是您所追求的“运行时”注入。当然,注入的方法将无法用于静态编译的代码调用



 类似资料:
  • 出于测试的目的,有时我想看看我的代码是如何处理从代码的各个部分引发的意外运行时异常的。 有没有一种方法可以让我在调用这个方法时引发一个异常而不是返回一个有效的结果来导致它失败?我知道我可以添加显式代码来实现这一点,但我想知道是否可以用一个在运行时抛出异常的新方法替换任何类中的方法,或类似的方法;-)类似于Mockito如何执行以下操作: 我希望任何解决方案都不需要任何额外的工具--只需要标准的JV

  • 问题内容: 我们在模型pojos中的一些方法已被注释为: columnDefinition 属性取决于数据库供应商,因此在尝试使用Hibernate删除HSQLDB中的架构时会失败: 为了解决这个问题,我正在考虑这个解决方案(但不想花时间,如果不可能的话),在运行时,为每个方法列加注: 获取@Column批注 创建列注释的副本,使用javaassist将columnDefinition设置为nul

  • 问题内容: 我正在编写用于生产监控的独立Java应用程序。一旦开始运行,就会将api配置为.properties文件中设置的默认值。在运行状态下,可以更改api的配置,并应相应更新.properties文件。有办法实现吗?还是有其他方法可以实现这一目标? 提前致谢 问题答案: Java Properties类(api在此处)指定了应该正确执行的“ load”和“ store”方法。使用FileIn

  • 本文向大家介绍详解PHP的Yii框架中组件行为的属性注入和方法注入,包括了详解PHP的Yii框架中组件行为的属性注入和方法注入的使用技巧和注意事项,需要的朋友参考一下 行为的属性和方法注入原理 上面我们了解到了行为的用意在于将自身的属性和方法注入给所依附的类。 那么Yii中是如何将一个行为 yii\base\Behavior 的属性和方法, 注入到一个 yii\base\Component 中的呢

  • Spring Boot提供了一种优雅的方法,可以使用将带有特定键前缀的属性注入Configuration类。这是显示在这里和这里。问题是,如何将前缀属性注入到实例中,如下所示?

  • 问题内容: 假设我有一个豆子: 然后使用这种测试代码将其转换为JSON或XML: 输出将是这样的: 现在,假设我想用一些动态名称替换“ data”属性: 如果我调用函数 convert(“ toto”), 我将获得以下输出: 如果我调用函数 convert(“ groovy”), 我会得到以下输出: 当然,我可以在JSON创建后执行String替换,但是如果您对程序化方法有一个满意的答案,我会接受