标签:耦合性 内容 class 操作 control demo cto 返回 system
操作日志对于程序员或管理员而言,可以快速定位到系统中相关的操作,而对于操作日志的管理的实现不能对正常业务实现进行影响,否则即不满足单一原则,也会导致后续代码维护困难,因此我们考虑使用AOP切面技术来实现对日志管理的实现。使用SpringAOP动态代理,在不影响源代码的前提下,打印日志,源代码的改变不影响动态代码,耦合性低
控制层代码:
/** * * @version: 1.1.0 * @Description: 控制层类 * @author: wsq * @date: 2020年6月25日下午8:56:44 */ @RestController public class LogTestController { @GetMapping("/logTest") public void logTest(@RequestParam("id") int id, @RequestParam("name") String name) { System.out.println("id:" + id + " " + "name:" + name); } @GetMapping("/logTest2") public void logTest2(@RequestParam("id2") int id, @RequestParam("name2") String name) { System.out.println("id2:" + id + " " + "name2:" + name); } }
日志管理类:
/** * * @version: 1.1.0 * @Description: 日志管理类 * @author: wsq * @date: 2020年6月25日下午8:57:22 */ @Component @Aspect public class WebLogAspect { // 创建日志 private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(* com.example.demo.controller..*.*(..))") public void logTestController() { } // 怎样操作传入参数 @Before("logTestController() && args(id, name)") public void logTestControllerBefore(JoinPoint joinPoint, int id, String name) { System.err.println(id); System.err.println(name); RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); HttpServletRequest httpServletRequest = ((ServletRequestAttributes) requestAttributes).getRequest(); // 记录下请求内容 logger.info("#############URL:" + httpServletRequest.getRequestURI().toString()); logger.info("#############HTTP_METHOD:" + httpServletRequest.getMethod()); logger.info("#############IP:" + httpServletRequest.getRemoteAddr()); logger.info("#############THE ARGS OF THE CONTROLLER:" + Arrays.toString(joinPoint.getArgs())); // 下面这个getSignature().getDeclaringTypeName()是获取包+类名的 // 然后后面的joinPoint.getSignature.getName()获取了方法名 logger.info("################CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); logger.info("################TARGET: " + joinPoint.getTarget());// 返回的是需要加强的目标类的对象 logger.info("################THIS: " + joinPoint.getThis());// 返回的是经过加强后的代理类的对象 } }
标签:耦合性 内容 class 操作 control demo cto 返回 system
原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13192926.html