![]() |
1
8
可以使用反射在运行时检查类,并使用所谓的“动态代理”对象包装类的所有方法。看看这位官员 Java documentation on reflection 例如(在该页面中搜索“debugproxy”,它实际上实现了一个用于输入和离开每个方法的回调)。 |
![]() |
2
8
面向方面编程是以半全局方式实现这一点的最简单方法。要么使用 AspectJ 直接使用,或使用IOC容器如弹簧 supports aspects . 实际上,您可以做的是定义“切入点”,这是一种表达源代码中执行其他操作的位置的方法。您可以在方法实现之前、之后或代替现有方法实现执行该操作(如调用callbackFunction())。 这里还有许多其他有用的特性,不过要注意,如果使用过度,可能会导致非常难以调试代码。 |
![]() |
4
1
其他几个人已经提到了AOP和AspectJ。如果您不想使用AspectJ,但仍然需要一些AOP功能, Spring 可以帮助您实现它。 为了使这项工作顺利进行,您应该对接口进行编码,因此Spring可以轻松地使用Java代理来注入AOP行为。所发生的是,您得到了接口的另一个实现,它将调用委托给“真正的”实现,并在方法调用之前和/或之后添加了一些额外的工作。 坦率地说,您可以在没有代理或Spring的情况下完成这项工作,只需手工编写一个新的实现,例如
其中this.delegate是“真正的”impl,但您的客户机最终调用了
|