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