dra*_*ake 0 java programming-languages
public abstract class Master
{
public void printForAllMethodsInSubClass()
{
System.out.println ("Printing before subclass method executes");
System.out.println ("Parameters for subclass method were: ....");
}
}
public class Owner extends Master {
public void printSomething () {
System.out.println ("This printed from Owner");
}
public int returnSomeCals ()
{
return 5+5;
}
}
Run Code Online (Sandbox Code Playgroud)
不搞乱子类的方法......是否可以printForAllMethodsInSubClass()在子类的方法执行之前执行?
更新:
使用AspectJ/Ruby/Python ......等是否也可以打印参数?以上代码格式如下:
public abstract class Master
{
public void printForAllMethodsInSubClass()
{
System.out.println ("Printing before subclass method executes");
}
}
public class Owner extends Master {
public void printSomething (String something) {
System.out.println (something + " printed from Owner");
}
public int returnSomeCals (int x, int y)
{
return x+y;
}
}
Run Code Online (Sandbox Code Playgroud)
AspectJ可以为您提供此功能,但它是一个单独的编译步骤,并涉及一些额外的库.
public aspect ServerLogger {
pointcut printSomething ();
before(): printSomething()
{
(Master)(thisJoinPointStaticPart.getTarget()).printForAlMethodsInSubClass();
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse Project提供了一个很好的AspectJ实现,可以很好地与Eclipse和Maven集成.这里有很多很棒的文档,在StackOverflow上有很多非常好的材料.
[更新]
要访问参数信息,您可以使用
thisJoinPoint.getSignature();
Run Code Online (Sandbox Code Playgroud)
如果返回的Object是MethodSignature的实例,则访问有关被调用函数的信息的方法,您可以使用Signature.getParameterNames()来访问被调用函数的参数.你必须使用一些反射来实际获得值,我认为 - AspectJ似乎并没有为你处理这个问题.我必须做一些实验来为你获得一些有用的代码.
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |