proceedingjoinpoint获取返回值类型_Lambda表达式获取传入的方法引用的方法名
时间: 2024-05-12 11:14:34 浏览: 80
1. 获取返回值类型
在AspectJ中,可以使用`JoinPoint`对象的`getSignature()`方法获取到当前执行的方法的签名信息,进而获取方法的返回类型。具体代码如下:
```java
@AfterReturning(pointcut = "execution(* com.example.demo.service.UserService.getUser(..))", returning = "result")
public void afterReturning(JoinPoint joinPoint, Object result) {
Signature signature = joinPoint.getSignature();
if (signature instanceof MethodSignature) {
MethodSignature methodSignature = (MethodSignature) signature;
Class<?> returnType = methodSignature.getReturnType();
System.out.println("返回类型:" + returnType.getName());
}
}
```
2. Lambda表达式获取传入的方法引用的方法名
Lambda表达式可以通过方法引用来传递方法的引用,如果需要获取这个方法的方法名,可以使用Java8中添加的`MethodReference`类来实现。具体代码如下:
```java
public interface UserService {
void addUser(User user);
}
public class UserServiceImpl implements UserService {
@Override
public void addUser(User user) {
System.out.println("addUser调用成功");
}
}
public class UserController {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(User user) {
userService.addUser(user);
}
}
public class MyAspect {
@Before("execution(* com.example.demo.controller.UserController.addUser(..)) && args(user)")
public void beforeAddUser(User user) {
MethodReference<UserService> methodReference = UserService::addUser;
String methodName = methodReference.getName();
System.out.println("方法名:" + methodName);
}
}
```
在`MyAspect`切面中,通过Lambda表达式将`UserService::addUser`传递给`MethodReference`类,然后通过`getName()`方法获取方法名。需要注意的是,这个方法名是`UserService.addUser`而不是`UserServiceImpl.addUser`,因为`MethodReference`是根据接口中的方法来获取方法名的。
阅读全文