0

我的服务很少有公共方法和私有方法。请注意,我没有此服务的接口。

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。但是,如果我不使用公共返回类型并且如果我使用通配符 (*),它也会拦截我不想要的所有私有方法。

4

2 回答 2

0

我可以通过将返回类型添加为 (*) 来实现这一点

@Around("execution(public * com.myservice.rest.CustomerService.*(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {

 }

图案:

<AccessModifier> <ReturnType> <Package/Class> <Method>(<Parameters>)
于 2013-11-26T00:10:22.617 回答
0

Spring documentation says you should:
1 Create pointcut:

    @Pointcut("execution(public * *(..))")
    public void anyPublicOperation() {}

2 Use this pointcut in your advice:

    @Aspect
    @Component
    public class ApplicationMonitoring {

    @Around("execution(com.myservice.rest.CustomerService.*(..)) && path_to_class_with_pointcut.anyPublicOperation()")
    public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {

    }
于 2013-11-07T10:37:44.510 回答