В моем проекте с весенней загрузкой 2.1.3.RELEASE,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
Я создал пользовательскую аннотацию:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
}
, и это mybatis dao:
@Component
@Mapper
public interface MyOrderDao {
@MyAnnotation
List<MyOrder> findBySerialNo(String orderNo);
}
и это мой аспект:
@Aspect
@Component
public class MyAspect {
@Pointcut(value = "@annotation(MyAnnotation)")
public void pointCut() {
}
@Around("pointCut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
String [] parameterNames = methodSignature.getParameterNames();
// TODO
return joinPoint.proceed();
}
}
, и я получаю параметр parameterNames пустым, но я помещаю аннотацию в метод класса вместо интерфейса, я получаю параметр parameterNames правильно. Вот так:
@Service
public class MyOrderService {
@Autowired
private MyOrderDao myOrderDao;
@MyAnnotation
public MyOrder getOrderBySerialNo(String serialNo) {
if (StringUtils.isBlank(serialNo)) {
return null;
}
List<MyOrder> orders = myOrderDao.findBySerialNo(serialNo);
if (orders != null && !orders.isEmpty()) {
return orders.get(0);
}
return null;
}
}
Итак, как я могу правильно получить parameterNames для mybatis dao?пожалуйста, помогите мне, большое спасибо.