gpt4 book ai didi

spring - 我可以使用AOP注解在spring中注入(inject)代码吗?

转载 作者:行者123 更新时间:2023-12-01 23:44:12 24 4
gpt4 key购买 nike

是否可以执行如下操作:



public void doStuff(@RequirePrivilege("foo") User user) {
//...
}

它是否能像下面这样有效地运行?



public void doStuff(User user) {
if(!user.hasPrivilege("foo"))
抛出新的 UserHasInsufficientPrivileges();//这是一个运行时异常
//...
}

我知道 Spring 有各种类型的 AOP 支持,但我能找到的最好的是带有注释的 AOP 代码,以便它可以在特定方法之前或之后执行。我想做相反的事情并注释应该更改的代码。

最终我可以在方法内部进行上述检查,但是注释方式提供了额外的文档,这使得用户显然需要特定的权限,而不必使文档与代码保持同步。

最佳答案

您可以考虑使用 AspectJ 来执行此操作,因为它将匹配注释。然后,您可以使用 around 方面来确定用户是否满足使用此方法的要求。

Spring 允许您使用 AspectJ,如果可能的话,我建议您不要在运行时执行此操作,而是在编译时执行此操作,因为每当启动应用程序时都没有理由为使用此方面付出代价。但是,如果您必须在运行时执行此操作,那么这是可行的,对我来说,我尝试尽可能多地使用编译时。

您可能想查看 AspectJ In Action ( http://www.manning.com/laddad2/ ),但这里有一个示例:签名图案:

* *(@RequestParam
(@Sensitive *))

描述

*Any method with one parameter marked with the @RequestParam annotations and the parameter’s type is marked with the @Sensitive annotation.*

示例

void create(@RequestParam
MedicalRecord mr), assuming
MedicalRecord carries the
@Sensitive annotation.

关于spring - 我可以使用AOP注解在spring中注入(inject)代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1015852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com