gpt4 book ai didi

java - 如何将方法添加到方法名称基于 AspectJ 中现有的带注释方法的类中?

转载 作者:行者123 更新时间:2023-11-30 07:32:11 24 4
gpt4 key购买 nike

考虑这段代码:

class DatabaseCommands {

@Privilege(ADMIN)
public void delete(Something thingToDelete, User currentUser) {
/* ... */
}
}

目前,此方法中加入了访问检查,以检查 currentUser 是否具有执行数据库命令的必要权限(如果没有则抛出异常)。

我必须向我的 AspectJ 文件中添加什么才能使用新方法

public boolean deleteAllowed(Something thingToDelete, User currentUser)

被添加到类中,具有相同的访问检查,但没有执行命令?

这个用例似乎类似于向字段添加 getter/setter 的用例,例如

class Foo {
@Getter @Setter
String name = ""
}

最佳答案

据我所知,不幸的是,不可能使用动态签名添加方法(在 AspectJ 中称为 Inter Type Declarations),因此无法根据另一个方法的名称或参数创建方法。

@Setter @Getter 不是使用AspectJ 实现的,而是使用其他技术实现的。 Spring Roo 将实际检查源代码,并为方面生成源代码,然后将其编译并应用于原始类。 Lombok 项目和其他项目直接使用 ASM、BCEL 或 APT 来检测 Java 字节码。 ASM 与 AspectJ 本身用来修改(AspectJ 术语中的 Weave).class 文件的工具包相同,但直接使用时比 AspectJ 灵活得多(也复杂得多)。 APT 是 Sun 的 Annotation Processing Tool,自 Java 6 以来它被“嵌入”在 Java 编译器中。它可用于在 Javac 编译具有某些注释的方法或类时“拦截”,并可用于“注入(inject)”新代码,其中包括 getter/setter 对或其他新方法。

关于java - 如何将方法添加到方法名称基于 AspectJ 中现有的带注释方法的类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762975/

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