在 Java 中使用面向方面编程和注释标记方法
我有一个基于 JAX-RS 的 (RESTEasy) REST 服务器,它使用 Java 注释来用 URL 来标记资源方法,例如,一个方法可以带有注释
@javax.ws.rs.GET
@javax.ws.rs.Path("/users/{user_id}")
public Response getUser(...)
,并且当客户端调用GET /users/1234 HTTP/1.1
URL时会自动调用。
我发现我的资源方法有越来越多的“通用”逻辑,必须使用每个方法执行:日志记录、安全检查、查询参数验证等。我相信这需要面向方面编程(AOP),但是我以前没有使用过这项技术。如果我使用 AOP 框架之一,我的注释“标签”是否会被保留,以便 JAX-RS 驱动程序可以找到我的资源方法?哪些 AOP 框架可以满足我的要求?
I have a JAX-RS based (RESTEasy) REST server that uses Java annotations to label resource methods with URLs, etc. For example, a methods can have the annotations
@javax.ws.rs.GET
@javax.ws.rs.Path("/users/{user_id}")
public Response getUser(...)
and will be called automatically when a client calls the GET /users/1234 HTTP/1.1
URL.
I am finding that my resource methods have more and more "common" logic that must be executed with every method: logging, security checks, query parameter validation, etc. I believe that this calls for Aspect-Orient-Programming (AOP), but I have not used this technology before. If I use one of the AOP frameworks, will my annotation "labeling" be preserved so that the JAX-RS driver can find my resource methods? Which AOP frameworks will work with my requirements?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
AspectJ 满足您的要求:AspectJ 可以拦截带注释方法的调用或执行,而无需更改或删除注释。
例如,我们在 JPA 实体上使用 AspectJ,这些类对 Hibernate 仍然可见。
AspectJ fulfills your requirements: AspectJ can intercept calls or executions of annotated methods without changing or removing the annotations.
For instance, we used AspectJ on JPA entities and these classes were still visible by Hibernate.