作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这段代码:
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/
我是一名优秀的程序员,十分优秀!