android aop静态方法,spring aop 不能对静态方法进行增强解决
想要通过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 不能对静态方法进行增强解决相关推荐
- AOP和Spring AOP介绍
AOP和Spring AOP介绍 文章目录 AOP和Spring AOP介绍 一.AOP简介 二. 传统开发存在的弊端 三. AOP实现原理 四.Spring AOP 五.AOP相关术语 一.AOP简 ...
- aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?
AOP(Aspect Orient Programming),它是面向对象编程的一种补充,主要应用于处理一些具有横切性质的系统级服务,如日志收集.事务管理.安全检查.缓存.对象池管理等. AOP实现的 ...
- 从AOP到Spring AOP
文章目录 一.前言 二.AOP基础知识 2.1 AOP 2.1.1 引子:AOP,AOP是什么? 2.1.2 使用对比的方式理解AOP--AOP与OOP 2.1.3 使用对比的方式理解AOP--静态A ...
- Spring AOP Capability and goals
5.1.AOP概念 让我们首先定义一些中心AOP概念和术语.这些术语不是特定于Spring的.不幸的是,AOP术语不是特别直观.但是,如果Spring使用自己的术语,那将更加令人困惑. 方面:跨越多个 ...
- 9000+ 字,彻底征服 Spring AOP ,美滋滋
基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...
- Spring 学习笔记(二)Spring AOP
前言 容器和AOP是Spring的两大核心.本文将来学习Spring AOP. AOP是什么? AOP在计算机科学领域还是相对年轻的概念,由Xerox PARC公司发明.Gregor Kiczales ...
- Spring AOP知识点简介
文章目录 1.什么是AOP 1.1.AOP术语 1.2.AOP框架 2.动态代理 2.1.JDK动态代理 2.2.CGLIB动态代理 3.基于代理类的AOP实现 3.1.Spring的通知类型 3.2 ...
- 带你理解Spring AOP
AOP概述 在我们的日常开发中,除了正常业务逻辑外,还可能经常会需要在业务逻辑的特定位置加入日志,以便于调试和问题分析.但是这种插入日志的逻辑和业务逻辑间并不存在连续性和依赖性,这种逻辑侵入随着项目的 ...
- Spring AOP 功能使用详解
前言 AOP 既熟悉又陌生,了解过 Spring 人的都知道 AOP 的概念,即面向切面编程,可以用来管理一些和主业务无关的周边业务,如日志记录,事务管理等:陌生是因为在工作中基本没有使用过,AOP ...
最新文章
- 2019年,自动化机器学习AutoML技术还火吗? | BDTC 2019
- 百亿数据量下,掌握这些Redis技巧你就能Hold全场
- 使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash
- 移动app部分机型无法唤起h5支付宝支付_谜之wxs,uni-app如何用它大幅提升性能
- Django05: 请求生命周期流程图/路由层
- 第二十八期:阿里云VS腾讯云 谁才是中国未来的云计算之王?
- vb程序和python哪个简单_vb能配合python写程序么?
- windows 批处理设置环境变量
- EGit/User Guide
- Winform自动升级系统的设计与实现(源码)
- 有实用简单的PS小技巧吗?下面几个小技巧你知道几个呢?
- Oracle日期类型转long类型
- taptap解析安装包出错_光遇解析软件包出现问题怎么解决 安装失败原因解答
- 完整电商项目--(八)商品订单模块(1):订单结算与 mysql事务
- android 左右声道,android耳机左右声道接反具体修正方法
- K100多功能嵌入吞吐式电动发卡读写一体机|读卡器技术选型问答
- 一种通过物理分离实现WSUS伸缩性的方案
- uni-app 161朋友圈查看权限
- excel离散度图表怎么算_怎样在Excel中计算散点图面积
- el-dialog的宽度修改
热门文章
- log4j性能 slf4j_Log4j 2:性能接近疯狂
- 有效的Java第三版有哪些新功能?
- Java命令行界面(第17部分):jw-options
- 适用于Java开发人员的Elasticsearch:简介
- qotd服务_QOTD:Java线程与Java堆空间
- 在Java SE中使用Hibernate Bean Validator
- 真正释放Maven和Java EE的强大功能
- 春天:注入列表,地图,可选对象和getBeansOfType()陷阱
- weblogic ejb_使用Oracle WebLogic对应用程序外部的EJB的引用
- 设置本地Nexus存储库并从Maven部署WAR文件