我的服务很少有公共和私人方法。请注意,我没有此服务的界面。
package com.myservice.rest;
public class CustomerService {
public Customer getCustomerbyId(String id){
...................
.............
}
public Customer getCustomerbySSN(String SSN){
}
private boolean verfiyCustomer(){
}
}
我有周围的建议。我想拦截所有公共方法。
@Aspect
@Component
public class ApplicationMonitoring {
@Around("execution(public com.myservice.rest.CustomerService.*(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
}
我在通过maven name pattern expected
构建时遇到错误。但是,如果我不使用返回类型作为公共,如果我使用通配符(*),它也会拦截我不想要的所有私有方法。
答案 0 :(得分:0)
Spring文档说你应该:
1创建切入点:
@Pointcut("execution(public * *(..))")
public void anyPublicOperation() {}
2在你的建议中使用此切入点:
@Aspect
@Component
public class ApplicationMonitoring {
@Around("execution(com.myservice.rest.CustomerService.*(..)) && path_to_class_with_pointcut.anyPublicOperation()")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
}
答案 1 :(得分:0)
我可以通过将返回类型添加为(*)
来实现此目的@Around("execution(public * com.myservice.rest.CustomerService.*(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
}
模式:
<AccessModifier> <ReturnType> <Package/Class> <Method>(<Parameters>)