想要通过aop的方式记录HttpUtils发出的post请求日志,但是 aop 不能对静态方法进行增强。只能对实例方法进行增强。。

如果一定要增强静态方法,我们可以对目标类使用单例模式,然后通过调用实例方法去调用那个静态方法,而且对应的对象实例必须纳入spring容器管理,因此可以使用@Component申明下(注意不能直接new,直接new的对象不会纳入ioc管理,这样就不会被aop识别),然后在set实例方法上使用 @Autowired,将对象注入到 static修饰的 静态类对象。这样就可以使用 HttpsClientUtils.getHttpsClientUtils().HttpsPost() 实例方法来调用了,随后HttpsPost()方法就会被aop所拦截。

目标类:

@Component

public class HttpsClientUtils {

private static HttpsClientUtils httpsClientUtils;

@Autowired

public void setHttpsClientUtils(

HttpsClientUtils httpsClientUtils) {

HttpsClientUtils.httpsClientUtils = httpsClientUtils;

}

public static HttpsClientUtils getHttpsClientUtils() {

return httpsClientUtils;

}

/**

* 在上面添加的一个实例方法,用于aop识别

*/

public String HttpsPost(String url, String param) throws CaHelperException {

Map header = new HashMap<>();

header.put("Content-Type", "application/json");

return HttpsPost(url, param, header);

}

/**

* 需要被aop增强的静态方法

*/

public static String HttpsPost(String url, String param, Map header)

throws CaHelperException {

return HttpsRequest(url, param, header);

}

}

aop类,实现记录日志记录的逻辑

package org.szwj.ca.identityauthsrv.log;

import org.apache.commons.lang3.builder.ToStringBuilder;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Pointcut;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @description: AOP日志实现

* @author: yinkai

* @create: 2020/7/28 9:38

*/

@Aspect

public class BrokerAspectInHttpSend {

/**

* 定义切入点,拦截所有发起的第三方证书商的请求 拦截指定工具类 org.szwj.ca.identityauthsrv.util.common.http.HttpsClientUtils

*/

@Pointcut("execution(public * org.szwj.ca.identityauthsrv.util.common.http.HttpsClientUtils.*(..)))")

public void BrokerAspectInHttpSend() {

}

/**

* @description 环绕通知打印IAS中所有的Controller的信息

*/

@Around("BrokerAspectInHttpSend()")

public Object httpUtilAround(ProceedingJoinPoint jp) throws Throwable {

Logger logger = LoggerFactory.getLogger(jp.getTarget().getClass());

logger.warn(

"############################发起证书商http请求开始############################################");

Object proceed = null;

try {

// 获取处理请求的类方法

logger.warn("class_method={}",

jp.getSignature().getDeclaringTypeName() + "." + jp.getSignature()

.getName() + "()");

// 获取请求方法传入的参数

logger.warn("args={}", ToStringBuilder.reflectionToString(jp.getArgs()));

proceed = jp.proceed();

logger.warn("retrun={}", proceed);

} catch (Throwable throwable) {

logger.error("出现异常 {}", throwable.getMessage());

}

logger.warn(

"############################发起证书商http请求结束############################################");

return proceed;

}

}

android aop静态方法,spring aop 不能对静态方法进行增强解决相关推荐

  1. AOP和Spring AOP介绍

    AOP和Spring AOP介绍 文章目录 AOP和Spring AOP介绍 一.AOP简介 二. 传统开发存在的弊端 三. AOP实现原理 四.Spring AOP 五.AOP相关术语 一.AOP简 ...

  2. aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?

    AOP(Aspect Orient Programming),它是面向对象编程的一种补充,主要应用于处理一些具有横切性质的系统级服务,如日志收集.事务管理.安全检查.缓存.对象池管理等. AOP实现的 ...

  3. 从AOP到Spring AOP

    文章目录 一.前言 二.AOP基础知识 2.1 AOP 2.1.1 引子:AOP,AOP是什么? 2.1.2 使用对比的方式理解AOP--AOP与OOP 2.1.3 使用对比的方式理解AOP--静态A ...

  4. Spring AOP Capability and goals

    5.1.AOP概念 让我们首先定义一些中心AOP概念和术语.这些术语不是特定于Spring的.不幸的是,AOP术语不是特别直观.但是,如果Spring使用自己的术语,那将更加令人困惑. 方面:跨越多个 ...

  5. 9000+ 字,彻底征服 Spring AOP ,美滋滋

    基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...

  6. Spring 学习笔记(二)Spring AOP

    前言 容器和AOP是Spring的两大核心.本文将来学习Spring AOP. AOP是什么? AOP在计算机科学领域还是相对年轻的概念,由Xerox PARC公司发明.Gregor Kiczales ...

  7. Spring AOP知识点简介

    文章目录 1.什么是AOP 1.1.AOP术语 1.2.AOP框架 2.动态代理 2.1.JDK动态代理 2.2.CGLIB动态代理 3.基于代理类的AOP实现 3.1.Spring的通知类型 3.2 ...

  8. 带你理解Spring AOP

    AOP概述 在我们的日常开发中,除了正常业务逻辑外,还可能经常会需要在业务逻辑的特定位置加入日志,以便于调试和问题分析.但是这种插入日志的逻辑和业务逻辑间并不存在连续性和依赖性,这种逻辑侵入随着项目的 ...

  9. Spring AOP 功能使用详解

    前言 AOP 既熟悉又陌生,了解过 Spring 人的都知道 AOP 的概念,即面向切面编程,可以用来管理一些和主业务无关的周边业务,如日志记录,事务管理等:陌生是因为在工作中基本没有使用过,AOP ...

最新文章

  1. linux文本分析利器awk
  2. 美国邮政署将展开测试自驾卡车运输服务
  3. 干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案
  4. 纯css用图片代替checkbox和radio,无js实现方法
  5. 杀毒软件全免费遭厂家“抵制”
  6. linux相对路径列出目录文件,linux – UNIX:列出目录中具有相对路径的文件
  7. .NET Core 使用MailKit发送电子邮件
  8. 图数据库与关系数据库的实验对比——意大利商会 InfoCamere 案例
  9. oracle临时表空间暴涨,如何解决Oracle临时表空间过大
  10. java基础-java语言中的关键字总结
  11. 微信小程序首支视频广告片发布
  12. GRE+托福四个半月复习计划
  13. php 不恒等,php运算符 == 怎么使用以及与 === 恒等的区别是什么?
  14. 打开统计年鉴html,南京统计年鉴2018(HTML)
  15. 老司机推荐企业用什么代理ip好
  16. 解决Sublime Text 3在GB2312编码下的中文乱码问题
  17. web展示萤石云视频
  18. [渝粤教育] 西南科技大学 会计电算化 在线考试复习资料2021版(1)
  19. vscan Ineligible for use by VSAN
  20. 抛错java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit

热门文章

  1. [MEGA DEAL]完整的Java编程训练营(94%折扣)
  2. idea资源包下创建资源包_资源包技巧和最佳实践
  3. adf开发_ADF BC:创建绑定到业务组件的UI表
  4. 如何编写Java代理
  5. java高效复制文件并移动_Java 7:复制和移动文件和目录
  6. 带有Hibernate OGM的NoSQL –第一部分:持久化您的第一个实体
  7. 如何安装Gradle
  8. Java模因拒绝死亡
  9. 用java代码写美国时间_如何衡量Java代码所用的时间?
  10. 用python连接数据库_用Python连接MySQL