请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

虎妈猫爸小说 Java高级架构师-AOP日志框架实现 财富中文网

[复制链接]
查看: 600|回复: 1

73

主题

278

帖子

426

积分

等待验证会员

积分
426
发表于 2019-6-13 14:02 | 显示全部楼层 |阅读模式
这是写在帖子头部的内容接待关注头条号:Java小野猫
JDK静态代理实现日志框架
首先,在项目包com.ay.test 下建立营业接口类BusinessClassService,具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140201l56rd9pbfp3dx9su


BusinessC lassService 营业接口类可以了解为平常开辟营业建立的接口类, 接口中有一个简 单的方式doSomeThing 。然后,开辟营业类的实现类BusinessClassServiceImpl,具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202ijpjafaaeze62ajs


Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202m1ohimu9r769hwuf


实现类BusinessClassServicelmpl 实现了BusinessClassServ ice 接口, 并实现了doSomeThing 方式,在方式中打印“ do something ......” 。接着,开辟日志接口类My Logger , 具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202t4leoak94w0i9guf


? savelntoMethodTime : 记录进入方式的时候。 ? saveOutMethodTime : 记录退出方式的时候。 接口类MyLogger 开辟完成以后,用MyLoggerlmpl 类实现它, 具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202sldrzqhxuffk3nwq


Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202qxd35mizci0x75xm


MyLoggerlmpl 类实现接口MyLogger , 并实现savelntoMethodTime 和saveOutMethodTime 方式,在方式内部打印进入/退出方式的时候。 最初, 实现最重要的类MyLoggerHandler , 具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202vpgvvgpwz33g4s3o


Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202vtf50a4945cpppzp


? lnvocationHandler : 该接口中仅界说了一个方式: public Object invoke(Object obj, Method method, Object[] args) , 在利用时,第一个参数obj 通常为指代理类, method是 被代理的方式, args为该方式的参数数组。这个笼统方式在代理类中静态实现。 一切的代码开辟完成以后,开辟测试类MyLoggerTest 停止测试, 具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140202nkzhjj88o9ajooao


? Proxy . newProxylnstance :该类即为静态代理类, static Object newProxylnstance (ClassLoader loader, Class[] interfaces, JnvocationHandler h),返回代理类的一个实例,返 回后的代理类可以看成被代理类利用。在Proxy.new Proxy Instance方式中,共有以下三 个参数: ? Classloader loader: targetObject.getClass().getClassLoader()方针工具经过getClass 方式获得类的一切信息后,挪用getClassLoader()方式来获得类加载器。获得类力口载 器后,可以经过这个范例的加载器,在法式运转时,将天生的代理类力口载到JVM即 Java虚拟机中,以使运转时需要。 ?Class[] interfaces: targetObject.getClass().getinterfaces()获得被代理类的一切接口信 息,以便于天生的代理类可以具有代理类接口中的一切方式。 ? lnvocationHandler h : 利用静态代理是为了更好地扩大, 比如在方式之前做什么操 作,以后做什么操纵,这个时辰这些公共的操纵可以同一交给代理类去做。此时需 要挪用实现了InvocationHandler 类的一个回调方式。
运转测试类的ma in 方式,即可以在Intellij IDEA 控制台检察打印信息,具体信息以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203ypzd9pf4l9pvfk5v


以上就是操纵静态代理形式实现简单的日志框架, 具体的结构如图

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203debhe3hksl4szsk0


这里总结一下JDK 静态代理的一般实现步调: ( l )建立一个实现InvocationHandler 接口的类MyLoggerHandler,它必须实现invoke 方式。 (2 )建立被代理的类BusinessClassService 以及接口BusinessClassServicelmpl 。 (3 )挪用Proxy 的静态方式newProxyInstance ,建立一个代理类。 ( 4 )经过代理类挪用方式。
spring aop实现日志框架
利用Spring AOP 的注解方式实现日志框架是很是简单的。首先,在设置文件 spring-mvc且nl 中增加设置, 具体代码以下:

DXCPICKPRE_0</pre>

  • </aop:aspectj-autoproxy>: 声明自动为Spring容器中那些设置@aspectJ切面的bean建立 代理,织入切面。<aop : aspectj -autoproxy />有一个proxy-target-class属性,默以为fal se, 暗示利用JDK静态代理织入增强,当设置poxy-target-class 为true 时,暗示利用CGLib动 态代理技术织入增强。不外即使设备proxy-target-class 为fa lse ,假如方针类没有声明接 口,则Spring将自动利用CGLib静态代理。
设置增加完成以后,要界说一个切面Loglnterceptor ,具体代码以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203f97hq10h4999f1f2


Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203dyizi00yvb917i65


? @Aspect : 标识Loglntercepto r类为一个切面,供容器读。 ? @Before : 在所阻挡方式履行之前履行before 方式。 ? @After:在所阻挡方式履行以后履行after方式。 ? @Around :可以同时在所阻挡方式的前后履行一段逻辑。 ? execution 切入点指示符:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203vm6mip6npmevmzpl


暗示在controller 包中界说的肆意方式 的履行。execution 切入点指示符履行表达式的格式以下:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203a2yv0j11lly2nny9


翻译为:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203on01ynlq4qfyfmeh


其中黑色字体部分不能省略,各部分都支持通配符“*”来婚配全数。比力特别的为形参 表部分,其支持以下两种通配符:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203f9jzn4zn4l6pzz3u


例如:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140203j25d0p0m7pdaiypa


下面举一些execution 的利用实例,具体内容见表3 -3 。

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140204k4f07o0f6gzg3oiq


Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140204muio9st49hrhm44v


切面类Loglnterceptor 开辟完成以后, 重新启动springmvc-mybatis-book 项目,项目成功启 动后,在阅读器输入网址: http: //localbost: 8080/user/findAll , 即可以在lntellij IDEA 开辟工具的 控制台看到以下的打印信息:

Java高级架构师-AOP日志框架实现

Java高级架构师-AOP日志框架实现  国内新闻 140204nsjsg8o7ss8h8vch


私信头条号,发送:“材料”,获得更多“秘制” 佳构进修材料
若有收获,请帮手转发,您的激励是作者最大的动力,感谢!
感激您的阅读
[url=http://s-stolov.ru/katalog-stolov-i-stulev/ob
回复

使用道具 举报

71

主题

272

帖子

416

积分

等待验证会员

积分
416
发表于 2019-6-13 13:09 | 显示全部楼层
转发了
[url=https://megaparts.kz]сайлентблок[/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 科技资讯网|科技新闻网--最新最快科技新闻发布汇集平台。 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表