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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 逻辑运算符(&、|、^、!、&&、||)

    Java 逻辑运算符(&、|、^、!、&&、||)一、逻辑运算符短路逻辑运算符与逻辑运算符的区别是:逻辑运算符:先走一遍,在判断短路逻辑运算符:一但符合条件,后面的判断不走二、逻辑运算符逻辑运算符:&、|、^、!案例代码publicclasstest{publicstaticvoidmain(String[]args){//定义变量inti=10;intj=20;intk=30;//&:有false

    2025年6月28日
    3
  • k8s监控工具(k8s工具)

    工具集合:后渗透:Kubesploit:https://github.com/cyberark/kubesploit安全评估:RedKube:https://github.com/lightspin-tech/red-kube容器攻击工具:ccat:https://github.com/RhinoSecurityLabs/ccat安全测试:Kubestriker:https://github.com/vchinnipilli/kubestriker地址GitHub-aqu

    2022年4月17日
    60
  • Unity3D 系统宏

    Unity3D 系统宏

    2021年12月31日
    39
  • 挖矿病毒处理记录「建议收藏」

    挖矿病毒处理记录「建议收藏」wnTKYg进程发现 执行top 会发现此进程。wnTKYg应该是利用redis漏洞入侵,加了定时任务,每一段时间向固定地址发送请求,执行挖矿程序后导致cpu和带宽升高,kill进程会自动重启。检查authorized_keys、known_hosts文件[root@zfr~]#cd/root/.ssh[root@zfr~]#catauth…

    2022年6月3日
    34
  • 多线程(一)—进程和线程的概念

    多线程(一)—进程和线程的概念

    2020年11月12日
    200
  • ubuntu安装新字体命令_安装字体命令

    ubuntu安装新字体命令_安装字体命令ubuntu里新装的terminator里,字体实在是不忍直视。尤其是字母i,跟别的字母挤在一起,根本就看不清楚。所以特意下载了一个苹果的Monaco字体来代替。linux系统的字体文件放在/usr/share/fonts/目录以及用户的~/.fonts和~/.local/share/fonts目录下,第一个位置为系统所用用户共享,将字体安装到这个目录需要管理员权限;后面两个位置则为当前登陆用…

    2022年9月23日
    2

发表回复

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

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