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();
 
    }
 
}

结果输出:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JPA Specification常用查询+排序实例

    JPA Specification常用查询+排序实例

    这篇文章主要介绍了JPA Specification常用查询+排序实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • mybatis 一对多映射 column属性的注意事项说明

    mybatis 一对多映射 column属性的注意事项说明

    这篇文章主要介绍了mybatis 一对多映射 column属性的注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • java如何实现图片转化为数据流

    java如何实现图片转化为数据流

    这篇文章主要介绍了java如何实现图片转化为数据流,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 讨论分析JDK17是否会代替JDK8

    讨论分析JDK17是否会代替JDK8

    这篇文章主要为大家介绍了JDK17是否会代替JDK8的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • scala当中的文件操作和网络请求的实现方法

    scala当中的文件操作和网络请求的实现方法

    这篇文章主要介绍了scala当中的文件操作和网络请求的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Java使用泛型实现栈结构的示例代码

    Java使用泛型实现栈结构的示例代码

    泛型是JAVA重要的特性,使用泛型编程,可以使代码复用率提高。本文将利用泛型实现简单的栈结构,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-08-08
  • java批量解析微信dat文件

    java批量解析微信dat文件

    这篇文章主要为大家详细介绍了java批量解析微信dat文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • jconsole使用介绍(图文)

    jconsole使用介绍(图文)

    大家在学习java的时候,难免会对jvm进行一些深入的了解。推荐大家使用jdk下面的jconsole.exe来辅助理解jvm的一些概念
    2015-12-12
  • idea2020最新版配置maven的方法

    idea2020最新版配置maven的方法

    这篇文章主要介绍了idea2020最新版配置maven的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java消息队列RabbitMQ之消息回调详解

    Java消息队列RabbitMQ之消息回调详解

    这篇文章主要介绍了Java消息队列RabbitMQ之消息回调详解,消息回调,其实就是消息确认(生产者推送消息成功,消费者接收消息成功)  , 对于程序来说,发送者没法确认是否发送成功,需要的朋友可以参考下
    2023-07-07

最新评论