Spring AOP - 基于属性文件中的值的切入点

rsm*_*011 5 java spring spring-aop

我正在使用 Spring AOP,我希望能够定义一个切入点,只要调用包内的方法(其名称在属性文件中定义),就会触发该切入点。也就是说,我的切入点看起来像

@Pointcut("within(${base.packageName}.*)")
public void MyPointCut() {}
Run Code Online (Sandbox Code Playgroud)

然后如果我的配置文件有

base.packageName=foo.bar
Run Code Online (Sandbox Code Playgroud)

那么在运行时切入点的行为就像这样

@Pointcut("within(foo.bar.*)")
public void MyPointCut() {}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方法(例如,在切入点表达式中使用 SpEL、配置实现静态切入点接口的类),但没有任何效果。

spring 有没有办法根据配置文件中的值定义切入点?

Dav*_*e G 1

事实上,你不能这样做,可能是设计使然。

我将在这里向您提出一些建议,并希望您考虑其后果。

您要求能够动态地定义面向方面的构造的值。您将其放置在未经验证的外部可访问源中。如果一个敌对者,从安全角度考虑,要改变切入点并执行其他一些代码(甚至可能是任意的),你会认为安全吗?

AOP 虽然非常有价值,但也让大多数安全研究人员感到紧张。