2016-11-15 9 views
0

У меня этот класс в моей структуре Spring-model-view-controller (MVC) Spring. Я использую аспектно-ориентированное программирование (AOP), парадигму программирования, которая направлена ​​на повышение модульности, позволяя разделять сквозные проблемы. Все хорошо с этим классомSpring MVC: формальный несвязанный в pointcut

@Aspect 
public class MarketingAspect extends ServiceSupport { 

    @Pointcut("execution(* com.tdk.iot.services.client.LicenseService.*(..))") 
    public void handleServiceMethod() { 
    } 

    @Pointcut("execution(* com.tdk.iot.services.client.ApplicantService.*(..))") 
    public void handleApplicantServiceMethod() { 
    } 


    @Before("com.tdk.iot.services.aop.ApplicantAspect.handleServiceMethod()") 
    public void before(JoinPoint _jp) { 
     User user = getLDAPUser(); 
     if(user != null &&((user.getUserRole() != UserRole.MARKETING)) { 
      throw new NoSufficientRoleException(user == null ? null : user.getUserRole(), UserRole.MARKETING); 
     } 
    } 


    @Before("com.tdk.iot.services.aop.ApplicantAspect.handleApplicantServiceMethod()") 
    public void checkRolebefore(JoinPoint _jp) { 
     User user = getLDAPUser(); 
     if(user != null &&((user.getUserRole() != UserRole.MARKETING))) { 
      throw new NoSufficientRoleException(user == null ? null : user.getUserRole(), UserRole.MARKETING); 
     } 
    } 
} 

Я изменил метод обозначения getLDAPUser и теперь получает HttpServletRequest запрос в качестве параметра, поэтому я изменил метод как

@Before("com.tdk.iot.services.aop.ApplicantAspect.handleApplicantServiceMethod()") 
public void checkRolebefore(JoinPoint _jp, HttpServletRequest request) { 
    User user = getLDAPUser(request); 
    if(user != null &&((user.getUserRole() != UserRole.MARKETING))) { 
     throw new NoSufficientRoleException(user == null ? null : user.getUserRole(), UserRole.MARKETING); 
    } 
} 

и после того, как модифицировали этот метод, который я получил эта ошибка

java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut 

в моем XML:

<!-- Scan for aspects --> 
    <aop:aspectj-autoproxy />  
    <bean id="marketingAspect" class="com.tdk.iot.services.aop.MarketingAspect" /> 
+0

Вы включили spring aop в свой конфигурационный файл xml? в примечаниях

+1

вы можете показать свои конфигурации приложений – kuhajeyan

+0

Проблема началась, когда я изменил метод следующим образом: public void checkRolebefore (JoinPoint _jp, HttpServletRequest request) { –

ответ

1

Сначала основы AspectJ: ошибка formal unbound in pointcut просто означает, что ваш совет объявляет параметр, который не используется (привязан) к соответствующему pointcut. Вы можете связать параметры советы параметров метода с помощью args(), this(), target(), @annotation() и т.д.

Конкретная проблема заключается в том, что в ваших советов вы объявляете параметр HttpServletRequest request. Откуда должна исходить эта ценность? Соответствующий pointcut, кажется, перехватывает другой метод совета, который не имеет никакого параметра типа HttpServletRequest. До тех пор, пока у вас нет источника, вы можете нажать на запрос сервлета, вам придется создать экземпляр самостоятельно.

Мое впечатление, что вам нужно узнать немного больше об АОП. Не стесняйтесь публиковать больше кода и объяснять, откуда вы хотите получить объект, тогда я, вероятно, смогу помочь вам исправить ваш код.