好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Spring动态代理实现日志功能详解

代理模式(Proxy)是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。

1.自定义业务接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

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.自定义业务接口实现类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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.日志接口和实现类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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实现:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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.测试类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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

 

     }

 

}

结果输出:

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

原文链接:https://blog.csdn.net/qq_40604313/article/details/119713796

查看更多关于Spring动态代理实现日志功能详解的详细内容...

  阅读:17次