我正在使用Spring AOP,我希望能够定义一个切入点,只要调用名称在属性文件中定义的包内部的方法,就会触发该切入点。也就是说,我的切入点看起来像
@Pointcut("within(${base.packageName}.*)")
public void MyPointCut() {}
然后如果我的配置文件有
base.packageName=foo.bar
然后在运行时,切入点的行为就像这个
@Pointcut("within(foo.bar.*)")
public void MyPointCut() {}
我尝试了几种不同的东西(例如在切入点表达式中使用SpEL,配置实现静态切入点接口的类)但没有任何工作。
春天有没有办法根据配置文件中找到的值定义切入点?
答案 0 :(得分:2)
这是不可能的,因为注释值必须是编译时常量表达式。所以你的切入点无法解析${}
占位符,因为占位符解析在运行时发生。查看更多here。
答案 1 :(得分:0)
你不能这样做的事实可能是设计上的。
我要在这里向你提出一些建议,我希望你能考虑一下这些后果。
您要求能够为面向Aspect的构造动态定义值。您将它放在未经验证的外部可访问源中。如果一个敌对的人,在这里考虑安全性,改变点数并执行其他一些代码(甚至可能是任意的)你会认为安全吗?
AOP虽然非常有价值,但却使大多数安全研究人员处于优势地位。