2013-08-16 7 views
1

я работаю с JSF 2.2 + Spring Framework 3.2.4Spring AOP Pointcut не называется

Итак, у меня есть этот applicationContent.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx.xsd"> 

    <aop:aspectj-autoproxy proxy-target-class="true" /> 
    <tx:annotation-driven transaction-manager="transactionManager"/> 
    <context:annotation-config/> 
    <context:component-scan base-package="com.vulcan.controller" /> 
    <context:component-scan base-package="com.vulcan.service" /> 
    <context:component-scan base-package="com.vulcan.dao" /> 
    <context:component-scan base-package="com.vulcan.spring.aop" /> 

..... 

Тогда я есть аспект компонента в

package com.vulcan.spring.aop; 

@Aspect 
public class LoggingService { 
    private Log log = LogFactory.getLog(this.getClass()); 

    @Pointcut("execution(* *.*(..))") 
    protected void loggingOperation() {} 

    @Before("loggingOperation()") 
    public void logJoinPoint() 
    { 
     System.out.println ("Hello"); 
    } 
    .... 

С этим типом выполнения я предполагаю, что этот pointcut будет срабатывать при каждом методе. Но проблема в том, что этот pointcut не срабатывает? Любая идея почему? Спасибо

FYI, я использую glassfish 4, и когда я развертываю свое веб-приложение, я не получил никакой конфигурации ошибок. Поэтому я предполагаю, что моя конфигурация в порядке.

+0

Spring AOP только советует публичные методы. Ваш совет, по крайней мере, вызван для этих людей или вообще не существует? – sheltem

+0

Я уже пробовал публичный метод e.x в loginController с (@Controller аннотированный). Я пытаюсь вызвать открытый метод doLogin() {return string} через jsf-страницу, и он по-прежнему не имеет ответа –

+0

Небольшой комментарий к вашей конфигурации xml '' уже подразумевается использованием ' '. Атрибут 'base-package' компонента-scan может содержать список сканируемых разделов, разделенных запятыми, поэтому вместо 4 элементов использовать один и помещать список пакетов, разделенных запятыми. Сохраняет вам несколько xml. –

ответ

12

@Aspect аннотированные классы не определяются автоматически весной, и поскольку он не обнаружен, он не известен фазам <aop:aspectj-autoproxy />. Так что в принципе нет никакого аспекта.

Либо добавьте @Component к вашим аннотированным классам @Aspect, чтобы Spring мог обнаружить и использовать аспект.

@Compopnent 
@Aspect 
public class LoggingService { ... } 

или объявить аспект Явно в вашем XML-файле

<bean class="LoggingService" /> 

В любом случае аспект будет подхвачена <aop:aspectj-autoproxy /> фасолью и совет будет работать.

-1

Попробуйте использовать execution(* *(..)).

+0

Спасибо за ваш ответ, но все еще не работает.Btw, я использую сервлет Filter в web.xml. Это вызывает эту проблему? –

+0

Нет, это не вызывает этой проблемы. Я изменил ответ. Проверять, выписываться. – user2550754

Смежные вопросы