以下是一个使用切面方法获取客户访问文章信息的案例,包括客户地址、访问的方法和传入的参数。请注意,以下代码是一个简化的示例,仅用于说明概念。
创建一个注解类
AccessLog,用于标记需要记录访问日志的方法:
javaCopy codeimport java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLog {
// 可添加其他属性
}
创建一个切面类
AccessLogAspect,在其中编写切面方法来获取客户访问文章的信息:
javaCopy codeimport javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Aspect
@Component
public class AccessLogAspect {
@Autowired
private HttpServletRequest request;
@Pointcut("@annotation(com.example.AccessLog)")
public void accessLogPointcut() {
// 定义切点,匹配所有使用 @AccessLog 注解的方法
}
@Before("accessLogPointcut()")
public void logAccess(JoinPoint joinPoint) {
// 获取客户地址
String clientAddress = request.getRemoteAddr();
// 获取访问的方法名
String methodName = joinPoint.getSignature().getName();
// 获取传入的参数
Object[] args = joinPoint.getArgs();
// 记录日志或进行其他操作
System.out.println("Client Address: " + clientAddress);
System.out.println("Method Name: " + methodName);
System.out.println("Arguments: " + Arrays.toString(args));
}
}
在需要记录访问日志的方法上添加
@AccessLog 注解:
javaCopy code@Service
public class ArticleService {
@AccessLog
public void viewArticle(String articleId) {
// 方法实现
}
// 其他方法...
}
在上述代码中,AccessLogAspect 类是切面类,通过 @Aspect 注解标记为一个切面。其中,accessLogPointcut() 方法定义了切点,匹配所有使用 @AccessLog 注解的方法。在 logAccess() 方法中,通过 request.getRemoteAddr() 获取客户地址,通过 joinPoint.getSignature().getName() 获取访问的方法名,通过 joinPoint.getArgs() 获取传入的参数。
在需要记录访问日志的方法上添加 @AccessLog 注解即可触发切面方法的执行。
请注意,上述代码中需要使用 HttpServletRequest 对象来获取客户地址,因此需要将其注入到 AccessLogAspect 类中。在实际应用中,可能还需要根据需要调整和补充切面方法的逻辑和日志记录方式。