Spring AOP实现日志框架的示例

发布时间:2020-10-29 19:19:52 作者:Leah
来源:亿速云 阅读:198

Spring AOP实现日志框架的示例?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

首先,在项目包com.ay.test 下创建业务接口类BusinessClassService,具体代码如下:

Spring AOP实现日志框架的示例

BusinessC lassService 业务接口类可以理解为日常开发业务创建的接口类, 接口中有一个简 单的方法doSomeThing 。然后,开发业务类的实现类BusinessClassServiceImpl,具体代码如下:

Spring AOP实现日志框架的示例

Spring AOP实现日志框架的示例

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

Spring AOP实现日志框架的示例

• savelntoMethodTime : 记录进入方法的时间。 • saveOutMethodTime : 记录退出方法的时间。 接口类MyLogger 开发完成之后,用MyLoggerlmpl 类实现它, 具体代码如下:

Spring AOP实现日志框架的示例

Spring AOP实现日志框架的示例

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

Spring AOP实现日志框架的示例

Spring AOP实现日志框架的示例

• lnvocationHandler : 该接口中仅定义了一个方法: public Object invoke(Object obj, Method method, Object[] args) , 在使用时,第一个参数obj 一般是指代理类, method是 被代理的方法, args为该方法的参数数组。这个抽象方法在代理类中动态实现。 所有的代码开发完成之后,开发测试类MyLoggerTest 进行测试, 具体代码如下:

Spring AOP实现日志框架的示例

• 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 控制台查看打印信息,具体信息如下:

Spring AOP实现日志框架的示例

以上就是利用动态代理模式实现简单的日志框架, 具体的结构如图

Spring AOP实现日志框架的示例

这里总结一下JDK 动态代理的一般实现步骤:

( l )创建一个实现InvocationHandler 接口的类MyLoggerHandler,它必须实现invoke 方法。

(2 )创建被代理的类BusinessClassService 以及接口BusinessClassServicelmpl 。

(3 )调用Proxy 的静态方法newProxyInstance ,创建一个代理类。

( 4 )通过代理类调用方法。

spring aop实现日志框架

使用Spring AOP 的注解方式实现日志框架是非常简单的。首先,在配置文件 spring-mvc且nl 中添加配置, 具体代码如下:

<aop:aspectj-autoproxy proxy-target-class="true">

</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 ,具体代码如下:

Spring AOP实现日志框架的示例

Spring AOP实现日志框架的示例

&#8226; @Aspect : 标识Loglntercepto r类为一个切面,供容器读取. &#8226; @Before : 在所拦截方法执行之前执行before 方法。 &#8226; @After:在所拦截方法执行之后执行after方法。 &#8226; @Around :可以同时在所拦截方法的前后执行一段逻辑。 &#8226; execution 切入点指示符: Spring AOP实现日志框架的示例表示在controller 包中定义的任意方法 的执行。execution 切入点指示符执行表达式的格式如下:

Spring AOP实现日志框架的示例

翻译为:

Spring AOP实现日志框架的示例

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

Spring AOP实现日志框架的示例

例如:

Spring AOP实现日志框架的示例

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

Spring AOP实现日志框架的示例

Spring AOP实现日志框架的示例

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

Spring AOP实现日志框架的示例

看完上述内容,你们掌握Spring AOP实现日志框架的示例的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. Spring的AOP是什么?如何使用AOP?
  2. Spring 面向切面编程AOP实现详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring aop

上一篇:SpringMVC在IDEA中的第一个程序是什么

下一篇:python实现word批量转HTML的示例

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》