Добавление новых аспектов в Spring PetClinic - PullRequest
0 голосов
/ 09 декабря 2011

In попытался добавить новый класс аспектов в пакет аспектов в org.springframework.samples.petclinic.

Мой класс аспекта выглядит следующим образом:

package org.springframework.samples.petclinic.aspects;

import org.apache.openjpa.jdbc.sql.Join;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.samples.petclinic.context.SessionContext;

import java.util.Date;

@Aspect
public class MethodLogAspect {

    Logger logger = LoggerFactory.getLogger(MethodLogAspect.class);

    @Pointcut("execution(* org.springframework.samples..*.*(..))")
    public void methodLogging(){}

    @Before("methodLogging()")
    public void logMethodStart(JoinPoint joinPoint){

        String methodName = joinPoint.getSignature().getName();
        String className = joinPoint.getTarget().getClass().getName();
        logger.info("class name: "+className+"invoked method:"+methodName+" at "+ ((new Date()).getTime()));
    }

    @After("methodLogging()")
    public void logMethodEnd(JoinPoint joinPoint){
                String methodName = joinPoint.getSignature().getName();
                String className = joinPoint.getTarget().getClass().getName();
                logger.info("class name: "+className+"finished invoking method:"+methodName+" at "+ ((new Date()).getTime()));
    }

}

Затем я добавил файл aop.xml в / resources / META-INF следующим образом:

<?xml version="1.0"?>

<!-- Custom aspects for the PetClinic sample application -->
<aspectj>

    <weaver>
        <include within="org.springframework.samples.petclinic..*"/>
    </weaver>

    <aspects>
        <aspect name="org.springframework.samples.petclinic.aspects.UsageLogAspect"/>
        <aspect name="org.org.springframework.samples.petclinic.aspects.MethodLogAspect"></aspect>
        <concrete-aspect name="org.springframework.samples.petclinic.aspects.ApplicationTraceAspect"
                extends="org.springframework.samples.petclinic.aspects.AbstractTraceAspect">
            <pointcut name="traced" expression="execution(* org.springframework.samples..*.*(..))"/>
        </concrete-aspect>
    </aspects>

</aspectj>

Когда я строю войну и разворачиваю ее, ни один из выводов, указанных в моем аспекте, не отображается в журнале. Я не уверен, какой именно шаг я здесь пропускаю. Я также чувствую, что не понимаю механику того, как все связано. Может кто-нибудь указать, что мне не хватает, и подтолкнуть меня в правильном направлении.

Спасибо

Edit:

Мне удалось решить эту проблему, добавив компонент (аспект) в папку applicationContext-jdbc.xml в папке webapp / WEB-INF / spring. Я не уверен, почему это будет работать? Может ли кто-нибудь дать мне объяснение? -Спасибо

1 Ответ

2 голосов
/ 10 декабря 2011

Я не уверен в конфигурации ткачества Aspectj, но в Spring AOP вы можете использовать

<aop:aspectj-autoproxy/> 

чтобы включить автоопределение аннотаций @Aspect. Прочитайте http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-ataspectj для получения дополнительной информации

...