要用到这个接口 org.aspectj.lang.JoinPoint。这里有文档http://www.eclipse.org/aspectj/doc/released/runtime-api/
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,主要方法:
java.lang.Object[] getArgs():获取连接点方法运行时的入参列表;
Signature getSignature() :获取连接点的方法签名对象;
java.lang.Object getTarget() :获取连接点所在的目标对象;
java.lang.Object getThis() :获取代理对象本身;
代码:
package service;
public interface Service {
public void saySomething(int num,String str);
public void doSomething(String name);
}
package service;
import org.springframework.stereotype.Component;
@Component("serviceImpl")
public class ServiceImpl implements Service {
@Override
public void saySomething(int num, String str) {
}
@Override
public void doSomething(String name) {
}
}
切面:
package advice;
import java.util.Calendar;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class Advice{
@Before("init()")
public void log(JoinPoint jp){
System.out.println(jp.getKind());
System.out.println("开始记录日志:");
String className = jp.getThis().toString();
String methodName = jp.getSignature().getName();
System.out.println(Calendar.getInstance().getTime());
System.out.println("调用" + className + "类的方法:" + methodName);
Object[] obj = jp.getArgs();
if(obj.length <= 0){
System.out.println("没有参数");
}else{
for(int i = 0; i < obj.length ; i++){
System.out.println("参数" + (i+1) + ":" + obj[i]);
}
}
}
@Pointcut("execution(* service.*.*(..))")
public void init(){
}
}
测试:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac = new ClassPathXmlApplicationContext("service/bean.xml");
Service ser = (Service) ac.getBean("serviceImpl");
ser.saySomething(123,"test");
ser.doSomething("test");
}
xml:
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="service,advice"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
来源:https://www.cnblogs.com/yeming/p/5462158.html