Весенний аспект совет не выполняется


Я пытаюсь выполнить совет по ведению журнала до выполнения действия, но действие вызывается, но совет не выполняется. Я использую JSF 2.2, Spring 3.2, AspectJ-1.6.11 Пожалуйста, дайте мне знать, что я делаю неправильно, так как это не дает никакой ошибки, просто совет не выполняется.

Ниже приведен пример кода

LoggingAspect.java

package com.igate.mldb.util.aop;

import java.util.Arrays;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LoggingAspect {

    @Around("com.example.action.FirstAction.checkLogin()")
    public void logAround(ProceedingJoinPoint joinPoint) throws Throwable
    {
        System.out.println("logAround() is running!");
        System.out.println("hijacked method : " + joinPoint.getSignature().getName());
        System.out.println("hijacked arguments : " + Arrays.toString(joinPoint.getArgs()));

        System.out.println("Around before is running!");
        joinPoint.proceed(); //continue on the intercepted method
        System.out.println("Around after is running!");

        System.out.println("******");
    }


    @Pointcut("execution(public * *(..))")
    public void anyPublicOperation() {
        System.out.println("Inside Pointcut execution");
    }

    @Before("execution(public * *(..))")
    public void logBefore(JoinPoint joinPoint) {

        System.out.println("logBefore() is running!");
        System.out.println("hijacked : " + joinPoint.getSignature().getName());
        System.out.println("******");
    }
}

Класс Действий Первое действие.java

package com.example.action;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("request")
public class FirstAction{
    private String name;

    private String password;

    public String checkLogin() {
        System.out.println("In Action");

        if ((name.equals("mks")) && (password.equals("mks"))) {
            System.out.println("In IF");
            System.out.println("Name -->" + name + " password-->" + password);
            return "SUCCESS";
        } else {
            System.out.println("In else");
            System.out.println("Name -->" + name + " password-->" + password);
            return "error";
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Внизу-Моя весна. конфигурация ApplicationContext.xml

<aop:aspectj-autoproxy />

<context:component-scan base-package="com.example.action, com.igate.mldb" />

Конфигурация JSF лица-конфиг.xml

<application>
    <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
    </el-resolver>

    <locale-config>
        <default-locale>en</default-locale>
    </locale-config>

    <resource-bundle>
        <base-name>MLDB</base-name>
        <var>mldb</var>
    </resource-bundle>
</application>

С уважением, Свапнил Киллекар

1 2

1 ответ:

Я мало что знаю о Spring, но я знаю синтаксис AspectJ и могу сказать вам, что в вашем @Around Совете pointcut отсутствует возвращаемый тип в сигнатуре метода. Скорее это должно быть так:

@Around("* com.example.action.FirstAction.checkLogin()")

Или, точнее, потому что checkLogin возвращает a String:

@Around("String com.example.action.FirstAction.checkLogin()")

Следовательно, ваш совет не может вернуться void, он должен вернуться Object или String тоже:

@Around("String com.example.action.FirstAction.checkLogin()")
public String logAround(ProceedingJoinPoint joinPoint) throws Throwable
{
    System.out.println("logAround() is running!");
    System.out.println("hijacked method : " + joinPoint.getSignature().getName());
    System.out.println("hijacked arguments : " + Arrays.toString(joinPoint.getArgs()));

    System.out.println("Around before is running!");
    String result = joinPoint.proceed(); //continue on the intercepted method
    System.out.println("Around after is running!");

    System.out.println("******");
    return result;
}

Чего я не знаю, так это того, что если ваш весенний конфиг верен, я могу помочь только с частью AspectJ, извиняюсь.