lup*_*oem 7 aspectj spring-aop
我想从业务类中的方法访问局部变量,方法是在方面类中.例如
class BusinessClass {
public void simpleTest() {
...
String localString = new String( "test" );
...
}
}
MyAspect {
log() {
// I WANT TO ACCESS THE VALUE OF LOCALSTRING HERE
}
}
Run Code Online (Sandbox Code Playgroud)
我想在MyAspect的log方法中访问localString的值.如果有任何方法可以使用Spring/AspectJ完成此操作,请告诉我.另外,有没有办法在不改变simpleTest方法签名的情况下完成?
非常感谢!
And*_*erg 18
遗憾的是,局部变量不会通过连接点公开.这意味着您无法编写切入点来匹配它们.所以,答案是否定的,你不能直接这样做.
但是,如果您要重构代码以便在方法内部创建局部变量,那么您可以访问它.
从概念上讲,这种重构可能对您的代码更好.您可以通过将其封装在命名良好的方法中,明确分配正在执行的操作,而不是简单地分配新的局部变量.
例如,这个:
String localString = new String( "test" );
Run Code Online (Sandbox Code Playgroud)
成为这个:
String localString = allocateTestString(); // or some better name
Run Code Online (Sandbox Code Playgroud)
用这种方法:
private String allocateTestString() {
return new String( "test" )
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写一个切入点以这种方式捕获局部变量:
after() returning(String var) : call(private String allocateTestString()) {
// do something fun
}
Run Code Online (Sandbox Code Playgroud)
据我了解,方面旨在适用于许多方法(由切入点定义).因此,他们没有看到方法的内部:只是方法的参数和它的结果.这意味着,你想要什么不能做直接,但你可以尝试重构你的方法分为两个部分,一个是取localString作为参数,并应用默认值,它的其他.这将为您提供一个方便的连接点.(AspectJ引用列出了连接点,对局部变量的引用不是其中之一.)如果将"内部"方法设为私有或包私有,则甚至不会更改方法的通常理解的签名(因为外部代码将无法依赖于引入的方法).
| 归档时间: |
|
| 查看次数: |
7719 次 |
| 最近记录: |