Spring动态代理实现日志功能详解
更新时间:2021年08月17日 11:02:52 作者:haijiao12138
这篇文章主要为大家详细介绍了Spring动态代理实现日志功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
代理模式(Proxy)是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。
1.自定义业务接口
package com.haijiao12138.demo.spring.agentLog0815; /** * @author: haijiao12138 * @ClassName: BusinessClassService * @description: TODO * @date: 2021/8/15 14:33 */ public interface BusinessClassService { public void doSomeThing();//自定义接口 }
2.自定义业务接口实现类
package com.haijiao12138.demo.spring.agentLog0815; /** * @author: haijiao12138 * @ClassName: BusinessClassServiceImpl * @description: 业务类 * @date: 2021/8/15 14:34 */ public class BusinessClassServiceImpl implements BusinessClassService { //执行某事 @Override public void doSomeThing() { System.out.println("doing somthing......"); } }
3.日志接口和实现类
package com.haijiao12138.demo.spring.agentLog0815; import java.lang.reflect.Method; /** * @author: haijiao12138 * @ClassName: MyLogger * @description:日志类接口 * @date: 2021/8/15 14:38 */ public interface MyLogger { //记录进入方法时间 public void saveIntoMethodTime(Method method); //记录退出方法的时间 public void saveOutMethodTime(Method method); }
package com.haijiao12138.demo.spring.agentLog0815; import java.lang.reflect.Method; import java.util.Date; /** * @author: haijiao12138 * @ClassName: MyLoggerImpl * @description: TODO 日志实现类 * @date: 2021/8/15 14:40 */ public class MyLoggerImpl implements MyLogger{ @Override public void saveIntoMethodTime(Method method) { System.out.println("进入" + method.getName() +"方法时间为: " + new Date()); } @Override public void saveOutMethodTime(Method method) { System.out.println("退出" + method.getName() + "方法时间为:" + new Date()); } }
4.下面是日志类的handler实现:
package com.haijiao12138.demo.spring.agentLog0815; import java.lang.reflect.Method; import java.util.Date; /** * @author: haijiao12138 * @ClassName: MyLoggerImpl * @description: TODO 日志实现类 * @date: 2021/8/15 14:40 */ public class MyLoggerImpl implements MyLogger{ @Override public void saveIntoMethodTime(Method method) { System.out.println("进入" + method.getName() +"方法时间为: " + new Date()); } @Override public void saveOutMethodTime(Method method) { System.out.println("退出" + method.getName() + "方法时间为:" + new Date()); } }
5.测试类
package com.haijiao12138.demo.spring.agentLog0815; import java.lang.reflect.Proxy; /** * @author: haijiao12138 * @ClassName: MyLoggerTest * @description: TODO 日志测试类 * @date: 2021/8/15 14:43 */ public class MyLoggerTest { public static void main(String[] args) { /** 实例化真实项目中业务类 **/ BusinessClassService businessClassService = new BusinessClassServiceImpl(); /** 日志类的handler **/ MyLoggerHandler myLoggerHandler = new MyLoggerHandler(businessClassService); /** 获得代理类对象 **/ BusinessClassService businessClass = (BusinessClassService) Proxy.newProxyInstance(businessClassService.getClass().getClassLoader(), businessClassService.getClass().getInterfaces(),myLoggerHandler); /** 执行代理类方法 **/ businessClass.doSomeThing(); } }
结果输出:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Mybatis-Plus使用updateById()、update()将字段更新为null
本文主要介绍了Mybatis-Plus使用updateById()、update()将字段更新为null,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-08-08SpringBoot+MyBatis+AOP实现读写分离的示例代码
高并发这个阶段,肯定是需要做MySQL读写分离的。本文主要介绍了SpringBoot+MyBatis+AOP实现读写分离的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-11-11Spring 框架中的 Bean 作用域(Scope)使用详解
Spring框架中的Bean作用域(Scope)决定了在应用程序中创建和管理的Bean对象的生命周期和可见性。本文将详细介绍Spring框架中的Bean作用域的不同类型,包括Singleton、Prototype、Request、Session和Application,并解释它们的特点和适用场景。2023-09-09
最新评论