是否能够从注释中获取方法回调?

时间:2015-12-29 22:10:47

标签: java

我正在尝试在方法上使用注释@FeatureDependent来表示该方法需要启用某些内容才能使其工作。我想知道是否有可能在每次调用@FeatureDependent的方法时调用一个方法,该方法将检查是否满足要调用的方法的条件。

1 个答案:

答案 0 :(得分:1)

听起来你在描述Aspect Oriented Programming (AOI)。此技术允许您解决“交叉”问题,例如日志记录,安全性和事务管理等任务,这些任务往往会以相同的方式影响许多方法。你的用例听起来很适合AOP。

AOP有两种常见的方法。第一种机制是在容器(例如Spring容器)中创建对象。然后容器可以扫描类,检测需要应用的任何建议,并通过动态代理应用建议(谷歌搜索Spring和AOP是一个很好的起点)。缺点是您的组件需要由容器构建,因此对于较大的组件是有意义的。

第二种方法是额外的编译步骤(有时在编译时完成,有时作为单独的编译阶段完成,有时由编织类加载器完成)以连接其他方法。这通常称为“编织”,AspectJ是一个常见的库,可以为此进行调查。

这两种方法都允许您根据对象的注释应用“建议”(在方法调用之前和之后运行的代码)。更详细地解释将超出SO答案的范围,但我希望它可以帮助您开始。

我应该警告说,AOP在使应用程序流程变得复杂并且趋于难以理解和调试方面已经获得了一些声誉。结果它最近受欢迎程度下降。

另一种方法是使用Servlet Filters之类的东西,基本上是所有请求和工作流程的单一阻塞点,您可以在其中应用各种日志记录和工作流程。安全机制。这种方法往往更容易理解,并且涉及更少的“黑魔法”。