Весенний аспект совет не выполняется
Я пытаюсь выполнить совет по ведению журнала до выполнения действия, но действие вызывается, но совет не выполняется. Я использую 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 ответ:
Я мало что знаю о Spring, но я знаю синтаксис AspectJ и могу сказать вам, что в вашем
@Around
Совете pointcut отсутствует возвращаемый тип в сигнатуре метода. Скорее это должно быть так:@Around("* com.example.action.FirstAction.checkLogin()")
Или, точнее, потому что
checkLogin
возвращает aString
:@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, извиняюсь.