gpt4 book ai didi

java - AfterAdvice 用于静态实现接口(interface)的类的所有构造函数

转载 作者:行者123 更新时间:2023-12-01 05:55:07 26 4
gpt4 key购买 nike

我想对域对象进行一些授权检查。这包括检查是否允许某人实例化对象(取决于对象的类型 - 此检查是在外部完成的,因此无需解决此问题)。

我们所有的领域对象都实现一个特定的接口(interface)(直接或间接)

我需要的是一个在域对象实例化之后运行的建议,并且能够使用创建的实例(确定权限所需)。 (此外,当从 hibernate 状态调用构造函数时,建议可能不会执行)

我想使用 AspectJ(它对方法还有效)来实现这一点,理想情况下仅使用静态分析,因为没有运行时相关的更改

现在我正在尝试创建一个 @AfterReturning adivce 来拦截构造函数调用。但我没有让切入点工作。

我尝试过的:

@Pointcut("within(a.b.c.DomainObject+) && execution(*.new(..))")

@Pointcut("execution(a.b.c.DomainObject+.new(..))")

但是两者都不起作用。

有谁知道我怎样才能实现这个目标?

问候迈克尔

最佳答案

这里有一些例子可以帮助我弄清楚如何做类似的事情。 http://www.eclipse.org/aspectj/sample-code.html

此外,这是我在项目中用于测试目的的一些内容,用于在创建对象后添加监听器:

pointcut init(JComponent j):
this(j) &&
initialization(*.new());

after(JComponent j) returning: init(j) {
if(j instanceof JButton && !(j instanceof AccessibleButton))
System.out.println(j.toString() + thisJoinPointStaticPart.getSourceLocation());
j.addFocusListener(new VisualFocusListener());
}

编辑:

每次调用构造函数时,上面都会执行,无论是通过 this()super() 调用的构造函数 - 可能不是您想要的想。我刚刚找到了另一种方法来获取从构造函数返回的对象。

after() returning(JComponent j): call(*.new(..)) {
//do something with j
}

用英语读起来几乎就像在代码中一样:“从构造函数返回 JComponent 后,执行某些操作”。我有 *.new(..) 因为我不关心调用哪个构造函数或它需要什么参数,只要它给我一个 JComponent 即可。您可以通过说 Foo.new(..)Foo.new(int) 来进一步限制。

关于java - AfterAdvice 用于静态实现接口(interface)的类的所有构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257757/

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