![]() |
1
9
Spring提供了一些AOP功能,但还有其他库也提供了这些功能。 |
![]() |
2
7
|
![]() |
3
3
只是我的想法, 有可能使用AOP,通过字节码工程的方式,向calculateHeight方法注入一个方面。 然后,您可以通过ThreadLocal或else变量启用修补程序。 |
![]() |
4
2
cglib 是一个Java库,它可以做一些类似于猴子补丁的事情——它可以在运行时操纵字节码来改变某些行为。我不确定它是否能完全满足你的需要,但值得一看。。。 |
![]() |
5
2
使用Unsafe.putObject和类查找器,完全可以在Java中使用monkeypatch。在这里写了一篇博文: https://tersesystems.com/blog/2014/03/02/monkeypatching-java-classes/ |
![]() |
6
0
为了实现这一点,您需要拦截要替换的小部件的所有创建,这可能意味着为WidgetFactory创建一个类似的包装器。您必须能够配置要使用的WidgetFactory。 这还取决于没有客户端试图将IWidget强制转换回DefaultWidget。。。 |
![]() |
7
0
创建具有相同名称的类可能是唯一的其他选项,正如其他人指出的那样,它很难看,当您更新api库或在不同环境中部署时,您很容易忘记它并破坏内容,并且忘记为什么要这样设置类路径。 |
![]() |
8
0
您可以尝试使用PowerMock/Mockito之类的工具。如果可以在测试中进行模拟,那么也可以在生产中进行模拟。 然而,这些工具并不是真正设计成这样使用的,因此您必须自己准备环境,并且不能像在测试中那样使用JUnit Runner。。。 |
![]() |
9
-1
嗯,我一直在尝试发布建议,然后我发现它们不起作用,或者你已经提到你尝试过了。 我能想到的最好的解决方案是将WindowDisplayFactory子类化,然后在子类的createView()方法中,首先调用super.createView(),然后修改返回的对象以完全抛出小部件,并将其替换为满足您需要的子类的实例。但是这个小部件是用来初始化东西的,所以你必须改变所有这些。 然后我想到对createView()返回的对象使用反射,并尝试以这种方式解决问题,但同样,这很棘手,因为有太多东西是用小部件初始化的。不过,我想我会尝试使用这种方法,如果它足够简单,可以证明它优于复制和粘贴。 我会看这部电影,并想看看我是否能想出其他的点子。Java反射确实不错,但它无法打败我在Perl和Python等语言中看到的动态内省。 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 2 年前 |
![]() |
Gabe Tucker · 无法在golang中分配接口对象指针 3 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 7 年前 |
![]() |
Randall Flagg · 访问propertyinfo中的属性 7 年前 |
![]() |
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 7 年前 |
![]() |
tobeypeters · 反射铸造 7 年前 |
![]() |
myst02 · 如何在另一个方法之后调用该方法? 7 年前 |