Spring Aop с пользовательской аннотацией к методам mybatis dao, параметр Name равен нулю - PullRequest
0 голосов
/ 05 июля 2019

В моем проекте с весенней загрузкой 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?пожалуйста, помогите мне, большое спасибо.

...