iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >非Spring管理Bean怎么添加AOP
  • 492
分享到

非Spring管理Bean怎么添加AOP

2024-04-02 19:04:59 492人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“非spring管理Bean怎么添加aop”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“非Spring管理Bean怎么添加AOP”这篇文

这篇文章主要为大家展示了“非spring管理Bean怎么添加aop”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“非Spring管理Bean怎么添加AOP”这篇文章吧。

问题如下图

非Spring管理Bean怎么添加AOP

归其根本这是个历史项目,里面有很多的类并没有交给spring管理,但现在需要统一添加日志

面对这样的问题,其实只要了解AOP的原理,就会有多种方法。AOP都是基于动态代理来实现,而动态代理常见的就是cglib和java动态代理,不了解的可以看下之前干货君写的文章

  • java动态代理为什么需要基于接口

  • cglib动态代理对类没有任何限制吗?

但此两种方法似乎在这样的场景不好实现,需要修改大量的代码,那么有没有什么好的方案呢?

答案当然是有。

首先要清楚的是AOP的底层实现原理就是字节码,我们只需要从字节码层面,就一定可以解决这样的问题。因此可以利用编译期增强和运行期增强,常见的方案有两种,一种Java  Agent技术,另一种 AspectJ方案。

Java Agent

Java Agent中文名字叫做java  探针,可以在运行java时指定探针程序,对原程序无侵入,常见的一些APM工具都会这样,如skywalking,后续有机会给大家介绍下。如下图

非Spring管理Bean怎么添加AOP

java agent的主要原理就是利用JVMTI(JVM Tool  Interface),JVM用来暴露一些供用户扩展的接口集合,因此可以在此处做一些运行期字节码增强。

Java Agent内容比较多,有很多大家熟悉的工具都是基于它去做的,例如阿里的arthas。本文就不介绍了,后期会给大家详细介绍下Java  Agent。

AspectJ方案

可以利用aspectj + javac来编译织入代码,也可以利用Maven插件aspectj-maven-plugin,下面利用AspectJ注解 +  aspectj-maven-plugin来实战一下。

aspectj-maven-plugin官网  Http://www.mojohaus.org/aspectj-maven-plugin/usage.html

引入依赖

编译增强,依赖此jar

import org.aspectj.lang.annotation.Aspect;  import org.aspectj.lang.annotation.Before;  import org.aspectj.lang.annotation.Pointcut;  @Aspect  public class Aop {    @Pointcut("execution(* com.ganhuojun.gracefulshutdown.controller..*.*(..))")  public void pointcut1(){    }    @Before("pointcut1()")  public void before(){  System.out.println("controller before");  }  }

定义注解

注意:该注解不要交给spring管理

<plugin>  <groupId>org.codehaus.mojo</groupId>  <artifactId>aspectj-maven-plugin</artifactId>  <version>1.11</version>  <configuration>  <complianceLevel>1.8</complianceLevel>  <source>1.8</source>  <!--<showWeaveInfo>true</showWeaveInfo>-->  <!--<Xlint>ignore</Xlint>-->  <encoding>UTF-8</encoding>  <sources>  <source>  <basedir>src/main/java</basedir>  <!--此处使用include一致会导致织入失败,暂时未找到好的解决办法,不写则引用所有的Aspect-->  <!--<includes>-->  <!--<include>**/Aop.java</include>-->  <!--<include>**/ControllerAop.aj</include>-->  <!--</includes>-->  <excludes>  <exclude>**/ServiceAop.java</exclude>  </excludes>  </source>  </sources>  </configuration>  <executions>  <execution>  <Goals>  <goal>compile</goal>  </goals>  </execution>  </executions>  </plugin>

 配置maven插件

<plugin>  <groupId>org.codehaus.mojo</groupId>  <artifactId>aspectj-maven-plugin</artifactId>  <version>1.11</version>  <configuration>  <complianceLevel>1.8</complianceLevel>  <source>1.8</source>  <!--<showWeaveInfo>true</showWeaveInfo>-->  <!--<Xlint>ignore</Xlint>-->  <encoding>UTF-8</encoding>  <sources>  <source>  <basedir>src/main/java</basedir>  <!--此处使用include一致会导致织入失败,暂时未找到好的解决办法,不写则引用所有的Aspect-->  <!--<includes>-->  <!--<include>**/Aop.java</include>-->  <!--<include>**/ControllerAop.aj</include>-->  <!--</includes>-->  <excludes>  <exclude>**/ServiceAop.java</exclude>  </excludes>  </source>  </sources>  </configuration>  <executions>  <execution>  <goals>  <goal>compile</goal>  </goals>  </execution>  </executions>  </plugin>

 排除spring的aop

如果对spring aop比较熟悉的都知道,spring的aop也是基于AspectJ的,因此需要exclude的,已经配置到mavn的地方了。

编译&运行&测试

编译后class文件已经被织入了相关代码,如下图

非Spring管理Bean怎么添加AOP

运行相关日志输出如下

非Spring管理Bean怎么添加AOP

说明功能已经实现。

以上是“非Spring管理Bean怎么添加AOP”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: 非Spring管理Bean怎么添加AOP

本文链接: https://www.lsjlt.com/news/80372.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 非Spring管理Bean怎么添加AOP
    这篇文章主要为大家展示了“非Spring管理Bean怎么添加AOP”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“非Spring管理Bean怎么添加AOP”这篇文...
    99+
    2022-10-19
  • spring aop pointcut怎么添加多个execution
    这篇文章将为大家详细讲解有关spring aop pointcut怎么添加多个execution,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。spring aop pointcut 添...
    99+
    2023-06-21
  • 解析spring事务管理@Transactional为什么要添加rollbackFor=Exception.class
    spring中事务处理原理     利用aop生成代理对象执行带有Transactional事务注解的方法业务逻辑.项目启动过程中会生成代理对...
    99+
    2022-11-12
  • laravel8.5怎么添加用户权限管理
    本篇内容主要讲解“laravel8.5怎么添加用户权限管理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel8.5怎么添加用户权限管理”吧!      &...
    99+
    2023-06-26
  • spring IOC容器的Bean管理XML自动装配怎么实现
    这篇文章主要讲解了“spring IOC容器的Bean管理XML自动装配怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring IOC容器的Bean管理XML...
    99+
    2023-06-30
  • 怎么给mysql添加管理员的sql语句
    这篇文章主要讲解了“怎么给mysql添加管理员的sql语句”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么给mysql添加管理员的sql语句”吧!给添加管...
    99+
    2022-10-18
  • DKHhadoop集群怎么添加节点管理功能
    本篇内容介绍了“DKHhadoop集群怎么添加节点管理功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&...
    99+
    2022-10-19
  • SSM怎么实现在Controller中添加事务管理
    这篇文章主要介绍“SSM怎么实现在Controller中添加事务管理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SSM怎么实现在Controller中添加事务管理”文章能帮助大家解决问题。SSM在...
    99+
    2023-06-29
  • 阿里云服务器怎么添加磁盘管理
    简介 阿里云服务器是一种弹性计算服务,提供了强大的计算和存储能力,可以满足各种应用场景的需求。磁盘管理是服务器管理的重要环节之一,本文将介绍如何在阿里云服务器上添加磁盘,并进行磁盘管理。磁盘管理步骤步骤一:登录到阿里云控制台首先,打开浏览器...
    99+
    2024-01-01
    阿里 磁盘 服务器
  • Spring IOC容器基于XML外部属性文件的Bean管理怎么配置
    本篇内容主要讲解“Spring IOC容器基于XML外部属性文件的Bean管理怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC容器基于XML外部属性...
    99+
    2023-06-30
  • 怎么将QT TabBar添加到Windows11文件资源管理器
    今天小编给大家分享一下怎么将QT TabBar添加到Windows11文件资源管理器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文...
    99+
    2023-04-19
    qt windows11
  • win10怎么给批处理文件自动添加管理员权限?
    很多批处理文件在运行时都需要管理员权限,然而这些程序往往需要用户手动以管理员身份运行才能正常运作,这种“半自动化”设定事实上还是比较麻烦的,要是能够双击运行直接就带管理员权限岂不是更放心?其实这也...
    99+
    2023-05-21
    win10 管理员权限
  • 怎么在Android应用中添加一个文件管理功能
    这篇文章给大家介绍怎么在Android应用中添加一个文件管理功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。思路:获取存储器接口 遍历当前目录 利用ListView显示文件文件夹先是布局<&#63;xm...
    99+
    2023-05-31
    android roi
  • Linux系统怎么对账户进行管理对其进行添加修改和删除
    这篇文章主要介绍“Linux系统怎么对账户进行管理对其进行添加修改和删除”,在日常操作中,相信很多人在Linux系统怎么对账户进行管理对其进行添加修改和删除问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Lin...
    99+
    2023-06-13
  • 桌面麒麟系统怎么添加新字体? 麒麟操作系统上安装和管理字体的技巧
    麒麟操作系统是一款基于linux的开源操作系统,它以其稳定性和安全性而受到了广大用户的喜爱。对于设计师、排版工作者或者需要定制字体的用户来说,正确地安装和管理字体是非常重要的。本文将介绍如何在麒麟操作系统上安装和管理字体...
    99+
    2023-11-16
    麒麟系统 新增字体 添加字体
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作