spring aop保存日志案例,附有项目下载链接[通俗易懂]

spring aop保存日志案例,附有项目下载链接[通俗易懂]spring aop保存日志案例,附有项目下载链接

大家好,又见面了,我是你们的朋友全栈君。

jdk:jdk1.8 

工具:eclipse

自己新建个web工程,

本文参考:https://blog.csdn.net/qq_37980469/article/details/80649633


第一步,自定义注解类:

package com.vsked.test.userservice;

import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  
   
@Retention(RetentionPolicy.RUNTIME)  
@Target({ElementType.METHOD})  
public @interface BussAnnotation {  
     //模块名  
     String moduleName();  
     //操作内容  
     String option();  
 } 

第二步,切面类:

package com.vsked.test.userservice;

import org.aspectj.lang.ProceedingJoinPoint;  
import org.aspectj.lang.annotation.Around;  
import org.aspectj.lang.annotation.Aspect;  
import org.aspectj.lang.annotation.Pointcut;  
import org.springframework.stereotype.Component;  
   
   
 @Aspect  
 @Component  
 public class LogInterceptor {  
   
     @Pointcut("execution(public * com.vsked..*.addUser(..))")  
     public void aApplogic() {}  
   
     @Around(value = "aApplogic() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")  //@Around括号里面其实可以直接写@Around(“aApplogic()”),这可以拦截所有@Pointcut切点表达式下的所有方法。
     public Object interceptorApplogic(ProceedingJoinPoint pj,BussAnnotation annotation, Object object) throws Throwable {  
    	 System.out.println("ssssssssssssssss");
         System.out.println("LogInterceptor_moduleName:"+annotation.moduleName());  
         System.out.println("LogInterceptor_option:"+annotation.option());  
           
         return pj.proceed();//这里要返回pj.proceed(),否则需要加切面的方法无法return
     }  
 } 

j简单介绍下@execution 里面的public 表示要被切面的方法是要public修饰的,比如是private修饰的就不行。

第三步:service层,需要记录日志的地方

接口类:

package com.vsked.test.userservice;

public interface UserManagerApplogic {
	public void addUser(String name);  
}

实现类:

package com.vsked.test.userservice;

   
 import org.springframework.stereotype.Component;  
   
 @Component("userManager")   
 public class UserManagerApplogicImpl implements UserManagerApplogic {  
   
     @BussAnnotation(moduleName="人员管理",option="添加用户")  
     public void addUser(String name) {  
         System.out.println("UserManagerApplogicImpl_add a User!Name is "+name);  
     }  
 }  


applicationContext.xml 文件配置容器需要扫描的包,如果在测试没有运行成功,很有可能是配置这里没有放在正确的配置文件中,项目比较大的有多个功能类似applicationContext.xml的文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:aop="http://www.springframework.org/schema/aop"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
            http://www.springframework.org/schema/context  
            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
            http://www.springframework.org/schema/aop  
            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  
     <context:annotation-config />  
     <context:component-scan base-package="com.vsked"/>  
     <aop:aspectj-autoproxy />  
</beans>  

最后是测试类:

package com.vsked.test.userservice;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestLogInterceptor {

	@Test
	public void testLogInterceptor() {
		ApplicationContext ctx = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");
		UserManagerApplogic userManager = (UserManagerApplogic) ctx	.getBean("userManager");
		userManager.addUser("mynameisvsked");
		((AbstractApplicationContext) ctx).destroy();
	}
	
	public static void main(String[] args) {
		ApplicationContext ctx = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");
		UserManagerApplogic userManager = (UserManagerApplogic) ctx.getBean("userManager");
		userManager.addUser("mynameisvsked");
		 ((AbstractApplicationContext) ctx).destroy();
	}

}

运行即可!

目录结构如下:

spring aop保存日志案例,附有项目下载链接[通俗易懂]

这里是代码的链接地址,是个web工程,可下载下来直接运行:

链接:https://pan.baidu.com/s/1EN-Q7Tv-ZzgetuoJNY2avw 
提取码:988t 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105994.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月24日 上午7:40
下一篇 2022年4月24日 上午8:00


相关推荐

  • ICMP报文详解

    ICMP报文详解概述ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。ICMP报文的格式类型:占8位代码:占8位检验和:占16位说明:ICMP所有报文的前4个.

    2022年6月11日
    515
  • Jenkins学习三:介绍一些Jenkins的常用功能

    Jenkins学习三:介绍一些Jenkins的常用功能Jenkins一些常用的功能,如:备份和恢复jenkins、移动,删除或修改jobs、Jenkins启动时的命令行参数、修改jenkins的timezone、通过脚本启动jenkins、查看jenk

    2022年8月1日
    11
  • ZigBee协议栈(一)–协议栈介绍

    ZigBee协议栈(一)–协议栈介绍1、Zigbee协议栈简介  协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。  如图1所示:Zigbee协议分为两部分,IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;Zigbee联盟定义了NW

    2022年5月28日
    65
  • 利用Cinemachine实现相机不穿墙效果

    利用Cinemachine实现相机不穿墙效果以前一直都是代码控制,今天看见了这个插件,真的很好用,下面我们来看看,本人用的2018.1.7版本:首先呢,导入我们想用的资源点击上头编辑,选择CreatVirtualCamera拖进去Sphere,相机会跟随并且看向他点击这个按钮,可以给相机添加很多东西,这里说碰撞体Collider这是添加后多出来的组件这时候,如果后面有一堵墙,相机不会再往后靠…

    2022年5月28日
    37
  • 无废话ExtJs 入门教程

    无废话ExtJs 入门教程这是我在网上找的一篇很不错的 Extjs 入门教程 但是后面的与后台进行交互确实 ASP 但我学的是 Java 看完还是有点不清楚 所有 前面的入门我都直接贴上链接了 与数据库的交互我会另外开贴上自己的代码 教程是博客园的以为大牛写的 很感谢他的文章 地址如下 http www cnblogs com iamlilinfeng archive 2012 12 31 2840

    2026年3月19日
    3
  • 多智能体Agent协同系统是什么

    多智能体Agent协同系统是什么

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号