输出日志实例改成用Spring的AOP来实现

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

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

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

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

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

 

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

   

//****LogAround.java****
package com.gc.actionimport org.aopalliance.interceptor.MethodInvocation;
import org.aopalliance.interceptor.MethodInterceptor;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;//Interception Around通知会在Join Point的前后执行
public class LogAround implements MethodIntercetor{private Logger logger = Logger.getLogger(this.getClass().getName());//负责输出日志信息的代码public Object invoke(MethodInvocation mi) throw Throwabel{logger.log(Level.INFO,mi.getArguments()[0]+"开始审核数据...");try{Object result = mi.proceed();return result;}finally{logger.log(Level.INFO,mi.getArguments()[0]+"审核数据结束...")}
}
}    

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

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

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

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

//*****TimeBookInterface.java****package com.gc.impl;
import org.apache.log4j.Level;public interface TimeBookInterface{public void doAuding(String name); 
}//*****TimeBook.java*******
package com.gc.action;
import com.gc.impl.TimeBookInterface;public class TimeBook implements TimeBookInterface{public void doAuditing(String name){....
}
}

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

<!xml version="1.0" encoding = "UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"
>
<beans><bean id="HelloWorld" class = "com.gc.action.HelloWorld" depends-on="date"><property name = "msg"><value>HelloWorld</value></property><property name = "date"><ref bean = "date"/></property></bean><bean id="date" class="java.util.Date"/><bean id="log" class="com.gc.action.LogAround"/><bean id="timeBook" class="com.gc.action.TimeBook"/><bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces"><value>com.gc.impl.TimeBookInterface</value></property><property name="target"><ref Bean="timeBook"/></proterty><property name="interceportNames"><list><value>log</value></list></property></bean>
</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 }

 

转载于:https://www.cnblogs.com/victoria-c/p/5748701.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于.NetCore开发博客项目 StarBlog - (9) 图片批量导入

系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客&#xff1f;基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入基于.N…

zookeeper 入门讲解实例 转

转 http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.htmlzookeeper使用和原理探究&#xff08;一&#xff09;zookeeper介绍zookeeper是一个为分布式应用提供一致性服务的软件&#xff0c;它是开源的Hadoop项目中的一个子项目&#xff0c;并且根据google发表的&l…

小程序仿微信发现页 03《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 前言 《 程序员变现指南之 微信…

Silverlight与WCF之间的通信(4)silverlight以net.tcp方式调用console上寄宿的wcf服务

&#xff08;由于最近是针对一个demo进行的研究&#xff0c;在之前公开过代码结构&#xff0c;这里只是对需要改动的地方加以说明&#xff09; WCF4.0使得编写wcf服务不再那么复杂&#xff0c;去掉了许多的配置信息&#xff0c;客户端只需要一个服务地址&#xff0c;便可在系统…

【空间数据库】空间数据库引擎(Spatial DataBase Engine)ArcSDE详解

一、空间数据库引擎概述 空间数据库引擎的概念最早由ESRI提出。ESRI对SDE的定义是:从空间数据管理的角度看,SDE是一个连续的空间数据模型,借助这一模型,我们可以将空间数据加人到关系数据库系统( RDBMS)中去。 SDE可以理解为基于特定的空间数据模型,在特定的数据存储、数…

Git之提示There is no tracking information for the current branch.

1 问题 我项目比如是0.2分支&#xff0c;我需要修改项目的git地址&#xff0c;然后再pull新的代码 1&#xff09;修改github地址&#xff08;读者可以忽略&#xff09; 1.git remote 查看所有远程仓库 2.git remote rm origin 删除之前的版本库 3.git remote add origin htt…

Maui学习之路(一)--Windows窗体设置

Maui的学习之路作为 Maui的先行者&#xff0c;我有话要说&#xff0c;微软你为了让我成为牛 B 的程序员真的是煞费苦心&#xff0c;你一定是觉得我不够牛逼所以针对我&#xff0c;存心想气死我。好了废话不多说&#xff0c;Maui现在也算是正式发布了&#xff0c;我有点想用它来…

Git 常用命令大全

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码&#xff0c;管理私人的文档和源代码也有很多优势。 Git常用操作命令&#xff1a; 1) 远程仓库相关命令 检出仓库&#xff1a;$ git clone git://github.com/jquery/jquery.git 查看远程仓库&#…

为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效?

2019独角兽企业重金招聘Python工程师标准>>> 为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效&#xff1f;新手学习js或jquery时&#xff0c;一般是在本地调试&#xff08;前端学习一般用不到服务器端&#xff09;&#xff0c;当学习到cookie一节时&…

全解小程序猜数字游戏 04《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 社区有奖励 下面有投票 本文也…

Android之解决主页面Activity监听fragment退出问题(由NavHostFragment和RxFragment一起管理fragment)

1、 问题 app里面目前主页面是一个activity,然后部分fragment是由NavHostFragment管理,当splash、login等页面也放在navigation时,按手机的返回键这些页面只能一页页回退,因为设置了 app:defaultNavHost="true" 并不能在某个页面例如splash、login按返回键时退…

linux之ps命令详解

linux中ps(process status) 命令是LINUX下最常用的也是非常强大的进程查看命令&#xff0c;运用该命令可以确定有哪些进程正在运行和运行地状态、进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等等。 ps命令最常用的是用于监控后台进程的工作情况。 Linux 查看进程p…

【空间数据库】传统数据模型(层次、网状、关系)和空间数据模型详解

数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表达方式,即把在计算机中表示客观事物及其联系的数据及结构称为数据模型。本文详细讲述传统三大数据模型和空间数据模型。 一、数据模型概述 数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表…

聊聊 C# 中的多态底层 (虚方法调用) 是怎么玩的

最近在看 C 的虚方法调用实现原理&#xff0c;大概就是说在 class 的首位置存放着一个指向 vtable array 指针数组 的指针&#xff0c;而 vtable array 中的每一个指针元素指向的就是各自的 虚方法&#xff0c;实现方式很有意思&#xff0c;哈哈&#xff0c;现在我很好奇 C# 中…

sublime text 3 安装、添加命令行启动、汉化、注册码

1. 安装sublime&#xff1a; 下载&#xff1a;http://www.sublimetext.com/3 添加命令行启动&#xff1a;设置环境变量->计算机->右键属性->高级系统设置->环境变量->系统变量->Path->编辑&#xff0c;加入";安装路径"(如&#xff1a;;D:\Progr…

MVC基础知识-View

public ActionResult Index() {ViewBag.Message "Modify this template to jump-start your ASP.NET MVC application.";//展现到视图中数据//~/Views/Home/Index.cshtmlreturn View(); //展现指定的视图&#xff0c;当没有指定视图名称时&#xff0c;默认是指向根目…

Android之设置当前app为默认浏览器研究

1 需求 把当前app设置为默认浏览器 2 主要思路 分析竞品,我们主要通过2种方式设置app为默认浏览器 直接跳 手机“设置默认应用”界面来让用户选择 默认浏览器为哪个app打开一个链接,拉起手机所有浏览器,让用户去选择哪个浏览器,并且只有点击“始终”才会生效,仅仅点击“…

Linux下的用户和组

2019独角兽企业重金招聘Python工程师标准>>> 用户和组 GNU/Linux 通过用户和用户组实现访问控制 —— 包括对文件访问、设备使用的控制。Linux 默认的访问控制机制相对简单直接&#xff0c;不过还有一些更加高级的机制&#xff0c;包括 ACL 和 LDAP Authentication.…

漫画C语言 做个聊天软件你不懂也得懂

学完C语言做不出东西&#xff1f;不存在的&#xff0c;咱们做一个最“隐私”的聊天器&#xff0c;就俩人&#xff0c;你和我。咱们聊天的信息你知我知没别人知。 对了&#xff0c;本文评论区点赞、收藏抽奖。 社区也有抽奖&#xff0c;本周社区抽奖帖子 &#xff1a;https://b…

【Microstation】第一章:Microstation三维模型构建概述

MicroStation 是国际上和AutoCAD齐名的二维和三维CAD设计软件&#xff0c;第一个版本由Bentley兄弟在1986年开发完成。其专用格式是DGN&#xff0c;并兼容AutoCAD的DWG/DXF等格式。 MicroStation是Bentley 工程软件系统有限公司在建筑、土木工程、交通运输、加工工厂、离散制造…