想要通过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. 2019年,自动化机器学习AutoML技术还火吗? | BDTC 2019
  2. 百亿数据量下,掌握这些Redis技巧你就能Hold全场
  3. 使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash
  4. 移动app部分机型无法唤起h5支付宝支付_谜之wxs,uni-app如何用它大幅提升性能
  5. Django05: 请求生命周期流程图/路由层
  6. 第二十八期:阿里云VS腾讯云 谁才是中国未来的云计算之王?
  7. vb程序和python哪个简单_vb能配合python写程序么?
  8. windows 批处理设置环境变量
  9. EGit/User Guide
  10. Winform自动升级系统的设计与实现(源码)
  11. 有实用简单的PS小技巧吗?下面几个小技巧你知道几个呢?
  12. Oracle日期类型转long类型
  13. taptap解析安装包出错_光遇解析软件包出现问题怎么解决 安装失败原因解答
  14. 完整电商项目--(八)商品订单模块(1):订单结算与 mysql事务
  15. android 左右声道,android耳机左右声道接反具体修正方法
  16. K100多功能嵌入吞吐式电动发卡读写一体机|读卡器技术选型问答
  17. 一种通过物理分离实现WSUS伸缩性的方案
  18. uni-app 161朋友圈查看权限
  19. excel离散度图表怎么算_怎样在Excel中计算散点图面积
  20. el-dialog的宽度修改

热门文章

  1. log4j性能 slf4j_Log4j 2:性能接近疯狂
  2. 有效的Java第三版有哪些新功能?
  3. Java命令行界面(第17部分):jw-options
  4. 适用于Java开发人员的Elasticsearch:简介
  5. qotd服务_QOTD:Java线程与Java堆空间
  6. 在Java SE中使用Hibernate Bean Validator
  7. 真正释放Maven和Java EE的强大功能
  8. 春天:注入列表,地图,可选对象和getBeansOfType()陷阱
  9. weblogic ejb_使用Oracle WebLogic对应用程序外部的EJB的引用
  10. 设置本地Nexus存储库并从Maven部署WAR文件