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

时间:2017-12-10 04:07:29

标签: java spring spring-aop

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

@Pointcut("within(${base.packageName}.*)")
public void MyPointCut() {}

然后如果我的配置文件有

base.packageName=foo.bar

然后在运行时,切入点的行为就像这个

@Pointcut("within(foo.bar.*)")
public void MyPointCut() {}

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

春天有没有办法根据配置文件中找到的值定义切入点?

2 个答案:

答案 0 :(得分:2)

这是不可能的,因为注释值必须是编译时常量表达式。所以你的切入点无法解析${}占位符,因为占位符解析在运行时发生。查看更多here

答案 1 :(得分:0)

你不能这样做的事实可能是设计上的。

我要在这里向你提出一些建议,我希望你能考虑一下这些后果。

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

AOP虽然非常有价值,但却使大多数安全研究人员处于优势地位。