【发布时间】:2011-10-04 14:58:44
【问题描述】:
如何在启动时检查注解的所有使用情况?
例如,我有这个方面,它应用于使用@Protect 注释的方法,它应用了一些安全策略。在整个系统中,我们有用@Protect("valid-operation-1")、@Protect("valid-operation-2") 或@Protect("INVALID-operation") 注释的方法。应用程序启动后,我想检查为所有这些注释提供的参数,以检测此类错误配置。
特别是,我将检查我们是否在 Spring 应用程序上下文中定义了一个 bean,其 ID 与注解的参数匹配。这意味着,为了保护 void drive() 方法,我将使用 @Protect("drive") 进行注释,并期望 bean protect_drive 出现在应用程序上下文中。
您可以轻松地等到方法被调用,然后调用通知,然后检查参数。然后你会看到INVALID-operation 的定义是错误的。但这为时已晚。
是否可以在应用程序启动时检查所有带注释的方法?
【问题讨论】:
-
这将要求您在启动时加载所有这些类。对启动时间的影响是否可以接受?
-
您能否对“操作”字符串的性质提供一些见解?你对他们有什么控制权?例如,它们是否可以被限制为有效的 Java 名称(没有破折号等)?是否有一组在整个系统中全局有效的?可以将此集合编译为枚举 - 然后在您的@Protect 中使用枚举值吗?等等……
-
Ed,我更新了这个问题,澄清了注释的论点。我无法控制他们。启动时间可能需要很长时间,这不是问题。但是你在那里提出了一个有趣的观点。另一方面,您可以访问切入点表达式并执行与 AspectJ 引擎相同的搜索,我认为这很便宜。
标签: java spring annotations aspectj interceptor