AspectJ 切入点拦截一个 class
AspectJ pointcut to intercept a class
伙计们,我需要一个切入点,通过特定 class.
过滤我调用的函数
public aspect intLogin {
private capture c = new capture();
pointcut login() : execution(public * login(..))
before ():login(){
c.print();
}
}
这是我的方面,我想知道哪个class调用登录函数。你能帮帮我吗?
我使用 thisJoinPoint.getSourceLocation() 解决了这个问题。
代码是:
public aspect intLogin {
private capture c = new capture();
pointcut login(Object a) : call(public * login(..)) && (target(a)) && this(capture);
before (Object x):login( spring.aop.so_52992365.intLogin) {
String xString = x.toString();
System.out.println("The class that is calling the function is:" + thisJoinPoint.getSourceLocation());
c.print();
}
}
Helper class 被所有其他人调用:
package de.scrum_master.app;
public class Other {
public void doOther() {}
}
各种内在的驱动程序应用classes:
这里有
- 非静态内部 class,
- 静态内部class,
- 局部内部class,
- 匿名class
- 当然还有正常的 class。
package de.scrum_master.app;
public class Application {
public String foo(int number) {
new Other().doOther();
return "foo";
}
public class MyInner {
public void doSomething() {
new Other().doOther();
}
}
public static class MyStaticInner {
public void doSomethingElse() {
new Other().doOther();
}
}
public static void main(String[] args) {
new Application().foo(11);
new Application().new MyInner().doSomething();
new Application.MyStaticInner().doSomethingElse();
class LocalInner {
public void doWhatever() {
new Other().doOther();
}
}
new LocalInner().doWhatever();
new Runnable() {
@Override public void run() {
new Other().doOther();
}
}.run();
}
}
方面日志记录调用者 class 姓名:
package de.scrum_master.aspect;
public aspect CallingClassLogger {
before(Object caller) : !within(CallingClassLogger) && call(* *(..)) && this(caller) {
System.out.println(caller.getClass().getName());
}
}
控制台日志:
de.scrum_master.app.Application
de.scrum_master.app.Application$MyInner
de.scrum_master.app.Application$MyStaticInner
de.scrum_master.app.ApplicationLocalInner
de.scrum_master.app.Application
你的方面会打印出类似
的内容
Application.java:5
Application.java:11
Application.java:17
Application.java:28
Application.java:35
如果您对 class 名称感兴趣,这对 IMO 没有多大帮助。
伙计们,我需要一个切入点,通过特定 class.
过滤我调用的函数public aspect intLogin {
private capture c = new capture();
pointcut login() : execution(public * login(..))
before ():login(){
c.print();
}
}
这是我的方面,我想知道哪个class调用登录函数。你能帮帮我吗?
我使用 thisJoinPoint.getSourceLocation() 解决了这个问题。 代码是:
public aspect intLogin {
private capture c = new capture();
pointcut login(Object a) : call(public * login(..)) && (target(a)) && this(capture);
before (Object x):login( spring.aop.so_52992365.intLogin) {
String xString = x.toString();
System.out.println("The class that is calling the function is:" + thisJoinPoint.getSourceLocation());
c.print();
}
}
Helper class 被所有其他人调用:
package de.scrum_master.app;
public class Other {
public void doOther() {}
}
各种内在的驱动程序应用classes:
这里有
- 非静态内部 class,
- 静态内部class,
- 局部内部class,
- 匿名class
- 当然还有正常的 class。
package de.scrum_master.app;
public class Application {
public String foo(int number) {
new Other().doOther();
return "foo";
}
public class MyInner {
public void doSomething() {
new Other().doOther();
}
}
public static class MyStaticInner {
public void doSomethingElse() {
new Other().doOther();
}
}
public static void main(String[] args) {
new Application().foo(11);
new Application().new MyInner().doSomething();
new Application.MyStaticInner().doSomethingElse();
class LocalInner {
public void doWhatever() {
new Other().doOther();
}
}
new LocalInner().doWhatever();
new Runnable() {
@Override public void run() {
new Other().doOther();
}
}.run();
}
}
方面日志记录调用者 class 姓名:
package de.scrum_master.aspect;
public aspect CallingClassLogger {
before(Object caller) : !within(CallingClassLogger) && call(* *(..)) && this(caller) {
System.out.println(caller.getClass().getName());
}
}
控制台日志:
de.scrum_master.app.Application
de.scrum_master.app.Application$MyInner
de.scrum_master.app.Application$MyStaticInner
de.scrum_master.app.ApplicationLocalInner
de.scrum_master.app.Application
你的方面会打印出类似
的内容Application.java:5
Application.java:11
Application.java:17
Application.java:28
Application.java:35
如果您对 class 名称感兴趣,这对 IMO 没有多大帮助。