1.采用Interception Around通知的形式实现

Interception Around通知会在Join Point的前后执行,实现Interception Around通知的类需要实现接口MethodInterceptor。其实现思路是:

1)首先实现接口MethodInterceptor,在Invoke()方法里编写负责输出日志信息的代码,具体业务逻辑还使用前面的接口TimeBookInterface和它的实现类TimeBook

2)然后在Spring的配置文档中定义PointCut

3)最后编写测试程序,执行,查看输出

1)编写负责输出日志信息的类LogAround

  1. //****LogAround.java****
  2. package com.gc.action
  3.  
  4. import org.aopalliance.interceptor.MethodInvocation;
  5. import org.aopalliance.interceptor.MethodInterceptor;
  6. import org.apache.log4j.Level;
  7. import org.apache.log4j.Logger;
  8.  
  9. //Interception Around通知会在Join Point的前后执行
  10. public class LogAround implements MethodIntercetor{
  11. private Logger logger = Logger.getLogger(this.getClass().getName());
  12. //负责输出日志信息的代码
  13. public Object invoke(MethodInvocation mi) throw Throwabel{
  14. logger.log(Level.INFO,mi.getArguments()[]+"开始审核数据...");
  15. try{
  16. Object result = mi.proceed();
  17. return result;
  18. }
  19. finally{
  20. logger.log(Level.INFO,mi.getArguments()[]+"审核数据结束...")
  21. }
  22. }
  23. }

参数MethodInvocation:通过它可以获得方法的名称,程序传入的参数Object[]等

proceed方法,通过它即可执行被调用的方法

return result,返回值为被调用方法的返回值

com.gc.impl包中的接口和 com.gc.action包中的类

  1. //*****TimeBookInterface.java****
  2.  
  3. package com.gc.impl;
  4. import org.apache.log4j.Level;
  5.  
  6. public interface TimeBookInterface{
  7.  
  8. public void doAuding(String name);
  9. }
  10.  
  11. //*****TimeBook.java*******
  12. package com.gc.action;
  13. import com.gc.impl.TimeBookInterface;
  14.  
  15. public class TimeBook implements TimeBookInterface{
  16. public void doAuditing(String name){
  17. ....
  18. }
  19. }

2)定义Spring的配置文档config.xml

  1. <!xml version="1.0" encoding = "UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  3. "http://www.springframework.org/dtd/spring-beans.dtd"
  4. >
  5. <beans>
  6. <bean id="HelloWorld" class = "com.gc.action.HelloWorld" depends-on="date">
  7. <property name = "msg">
  8. <value>HelloWorld</value>
  9. </property>
  10. <property name = "date">
  11. <ref bean = "date"/>
  12. </property>
  13. </bean>
  14. <bean id="date" class="java.util.Date"/>
  15.  
  16. <bean id="log" class="com.gc.action.LogAround"/>
  17. <bean id="timeBook" class="com.gc.action.TimeBook"/>
  18. <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  19. <property name="proxyInterfaces">
  20. <value>com.gc.impl.TimeBookInterface</value>
  21. </property>
  22. <property name="target">
  23. <ref Bean="timeBook"/>
  24. </proterty>
  25. <property name="interceportNames">
  26. <list>
  27. <value>log</value>
  28. </list>
  29. </property>
  30. </bean>
  31. </beans>

id为log的Bean,负责输出日志信息;

id为timeBook的Bean,负责具体的业务逻辑考勤审核

id为logProxy的Bean,使用Spring提供的ProxyFactoryBean来实现代理,在该Bean里定义相关的属性,包括要代理的接口,目标类急要使用的Interceptor。

3)测试代码

  1. //******TestHelloWorld*********
  2.  
  3. package com.gc.test;
  4.  
  5. import com.gc.action.TimeBook;
  6. import com.gc.aciton.TimeBookProxy;
  7. import com.gc.impl.TimeBookInterface;
  8. public class TestHelloWorld{
  9. public static void main(String[] args){
  10. ApplicationContext actx = new FileSystemXmlApplicationContext("config.xml");
  11. TimeBookInterface timeBookProxy = (TimeBookInterface)actx.getBean("logProxy");
  12. timeBookProxy.doAuditing("张三");
  13. }
  14.  
  15. }

输出日志实例改成用Spring的AOP来实现的更多相关文章

  1. Nginx 日志改成 JSON 格式

    Nginx 日志默认为普通文本的格式,例如,下面是 Nginx 的一行访问日志: 10.88.122.105 - - [02/Dec/2017:09:15:04 +0800] "GET /j ...

  2. SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出

    写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...

  3. Spring Boot 使用 Log4j2 & Logback 输出日志到 EKL

    文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK ...

  4. spring boot使用slf4j输出日志

    spring boot使用slf4j输出日志 https://blog.csdn.net/qq442270636/article/details/79406346 Spring Boot SLF4J日 ...

  5. (转)log4j日志级别设置成DEBUG时输出Html代码等问题:

    log4j日志级别设置成DEBUG时输出Html代码等问题: 问题: log4j日志级别设置成DEBUG时会输出很多信息,包括一些Html代码 解决方案: log4j的控制是树形,所以在log4j.p ...

  6. 解决引用类型为什么打出的是地址值,又怎么改成输出属性值(toString()底层)

    一丶toString的源码解析: 一丶object的toString的源码解析: 集合中toString源码分析: 小结: 改成输出属性值 在父类中重写toString();方法 快捷键:Alt+In ...

  7. Spring按业务模块输出日志到不同的文件

    一.背景 在我们开发的过程中,可能存在如下情况: 1.有些时候我们需要调用第三方的接口,一般情况下,调用接口,我们都会记录请求的入参和响应的.如果我们自己系统的日志和第三方的日志混合到一个日志文件中, ...

  8. springboot的日志框架slf4j (使用logback输出日志以及使用)

    1.为什么使用logback? ——在开发中不建议使用System.out因为大量的使用会增加资源的消耗.因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序. ...

  9. SpringBoot使用logback输出日志并打印sql信息 --经典---

    最近在学习springboot以及一些springcloud插件的使用,其中发现默认的配置并不能打印一些有用的日志,所以需要自定义一些日志输出方式以便于查看日志排查问题,目前只整理了两种使用方式,如下 ...

随机推荐

  1. linux系统root用户忘记密码的重置方法

    如果不小心忘记了新安装的lCentOS7的root密码,现在将找回过程分享给大家. 1.首先,在启动grub菜单,选择编辑选项启动: 2.然后,按e 进入编辑模式: 3.将'linux 16'行'ro ...

  2. JAVA基础 Exception, Error

    转载请附上本文地址: http://www.cnblogs.com/nextbin/p/6219677.html 本文参考: JAVA源码 http://swiftlet.net/archives/9 ...

  3. [Sass]占位符 %placeholder

    [Sass]占位符 %placeholder Sass 中的占位符 %placeholder 功能是一个很强大,很实用的一个功能,这也是我非常喜欢的功能.他可以取代以前 CSS 中的基类造成的代码冗余 ...

  4. GridView模版列中设置

    在GridView模版列中设置如下<asp:TemplateField HeaderText="删除">    <ItemTemplate>         ...

  5. vue.js 请求数据

    VUE.JS var vm = new Vue({ el:"#list", data:{ gridData: "", }, mounted: function( ...

  6. ble示例代码

    ble代码下载: https://github.com/sutogan4ik/Android-BLE-GATT-Master-Slave

  7. 改变linux默认配色方案(dircolors和dircolors-solarized使用)

    前言 前几天刚买了阿里云的云服务器,今天使用putty进入服务器,发现linux默认的bash配色实在太丑. 特别是文件夹显示为深蓝色,到了白天,和黑色背景一搭配,根本看不清文字. 好在在github ...

  8. CSS系列:在HTML中引入CSS的方法

    HTML与CSS是两个作用不同的语言,它们同时对一个网页产生作用,因此必须将CSS与HTML链接在一起使用.在HTML中,引入CSS的方法主要有4种:行内式.内嵌式.导入式和链接式. 1. 行内式 行 ...

  9. Range Sum Query - Mutable

    https://leetcode.com/problems/range-sum-query-mutable/ 因为数组会变动,所以缓存机制受到了挑战...每次更新数组意味着缓存失效,这样一更新一查找的 ...

  10. 【Cocos2d-x for WP8 学习整理】(5)文字显示全整理

    学习 Cocos2d-x 有一阵了,现在要做个小东西,第一步就遇到了文字展示的问题,于是想把可能遇到的问题统统整理一下.这一部分也不局限于wp8,全平台应该都是一个解决方案. 先在脑袋里大致想了一下, ...