`
lizhensan
  • 浏览: 377170 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 代理 对一批方法 的前后进行特殊处理

    博客分类:
  • java
 
阅读更多
package proxy2;

/**
 *   
 * 如何对如下方法,统一添加一个前后处理的逻辑呢?
 * 有静态的、有非静态的?如何统一处理?
 */
public class BizCls2 {

	public static void staticMethod1() {
		System.out.println("处理方法1");
	}

	public static void staticMethod3(String args) {
		System.out.println("处理方法3"+args);
	}

	public void method2(String args) {
		System.out.println("处理方法2"+args);
	}
}

 

package proxy2;

import org.apache.commons.lang3.reflect.MethodUtils;

/**
 * 静态方法通过硬编码的形式来实现
 */
public class BizStaticMethodCaller {
	public static <T> T callWithLog(Class<?> type, String method, Object... parms) throws Exception {
		System.out.println("前处理日志打印,参数"+parms);
		Object ret = MethodUtils.invokeStaticMethod(type, method, parms);
		System.out.println("后处理日志打印");
		return (T) ret;
	}
}

 

package proxy2;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

/**
 * 动态代理只能处理 非静态的方法,非静态的方法通过该形式进行处理
 */
public class CglibProxy implements MethodInterceptor {
	static CglibProxy instence=new CglibProxy();
	
	public static <T>  T getProxyInstance(Class<T> type) {
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(type);
		enhancer.setCallback(instence);
		return (T) enhancer.create();
	}

	@Override
	public Object intercept(final Object target, Method method, final Object[] args, final MethodProxy proxy)
			throws Throwable {
		System.out.println("前处理日志打印,参数" + args);
		Object result = proxy.invokeSuper(target, args);
		System.out.println("后处理日志打印");
		return result;
	}
}

 

package proxy2;

/**
 * 
 * 使用方式
 */
public class TestCiglib {

	public static void main(String[] args) throws Exception {
		// 静态方法 的调用方式,ide的代码提示、效验、查找引用不太好用了 ,不过也可以对IDE的扩展进行弥补
		// 推荐非静态的方法
		BizStaticMethodCaller.callWithLog(BizCls2.class, "staticMethod1");
		BizStaticMethodCaller.callWithLog(BizCls2.class, "staticMethod3", "333");

		// 如何使非静态的方法,统一采用 动态代理的形式,所以对象应有统一的地方创建
		BizCls2 hello = CglibProxy.getProxyInstance(BizCls2.class);
		// 非静态的,通过代理来完成
		hello.method2("22");
	}
}

 运行结果:

前处理日志打印,参数[Ljava.lang.Object;@12b6651

处理方法1

后处理日志打印

前处理日志打印,参数[Ljava.lang.Object;@124bbbf

处理方法3333

后处理日志打印

前处理日志打印,参数[Ljava.lang.Object;@1960f05

处理方法222

后处理日志打印

 

 

应该还有一种很暴力的方式就是 采用 ASM  对java字节    添加一些额外的代码来实现

google 搜 ASM AOP 很多例子

 

分享到:
评论

相关推荐

    java过滤器对所有参数去除前后空格

    对项目中的所有参数去除前后空格过滤,统一处理参数!可以基于此过滤器实现过滤跨站脚本攻击,参数的增加,修改!敏感词汇过滤。实现原理为重写HttpServletRequestWrapper,获取参数的方法。include和 Forwarded ...

    java图片处理工具类JAR包 java-image-scalingjar

    java图片处理工具类JAR包 java-image-scalingjar

    Java代理服务器的实现

    在Java编程领域,代理服务器是一种常见的网络架构组件,它在客户端和目标服务器之间起到了中介的作用。代理服务器的主要功能包括缓存、数据过滤、访问控制、负载均衡等,从而提高网络性能,保护内部网络,或者提供...

    java中main方法发送httpPost请求

    这里我们将深入探讨如何在Java的main方法中实现这个...理解并掌握这一过程对提升Java后端开发能力至关重要。在实际项目中,我们还需要考虑异常处理、安全性(如HTTPS)、性能优化等问题,以确保代码的健壮性和效率。

    Java OCR 图像智能字符识别技术,可识别中文

    6. 分类识别:使用预先训练的模型(如深度学习的CNN模型或传统的模板匹配方法)对字符进行分类,将其转化为对应的文本。 对于中文字符的识别,Java OCR面临更大的挑战,因为中文字符数量庞大且形状复杂。常用的Java...

    java 图片旋转、翻转、镜像处理

    在Java编程语言中,处理图像是一项常见的任务,包括图片的旋转、翻转和镜像操作。这些功能在很多场景下都很实用,例如照片编辑、图像处理应用或是网页开发。本篇将详细介绍如何使用Java实现这些功能,并以`ImgRotate...

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java api最新7.0

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    Java+OpenCV+OCR 图像字符处理

    本项目“Java+OpenCV+OCR 图像字符处理”聚焦于利用Java编程语言结合OpenCV库和OCR(Optical Character Recognition,光学字符识别)技术来实现这一功能。下面我们将深入探讨这些知识点。 首先,OpenCV是一个开源的...

    java调用C#封装的dll方法

    #### 第一种方法:Java利用JNA进行调用 **背景介绍:** 为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java平台之间的互操作性问题。其中一...

    基于java开发环境的WebRTC 点对点视频通话系统

    总结来说,这个基于Java开发环境的WebRTC点对点视频通话系统是一个综合性的项目,涵盖了Java与WebRTC的集成、信令处理、媒体流管理等多个技术层面。开发者需要具备扎实的Java基础、良好的网络通信知识,以及对WebRTC...

    java开源包5

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    基于Java的RTSP服务源码

    JMF提供了对RTSP和RTP的API支持,而Xuggler则是一个强大的音视频处理库,可以方便地进行编码、解码以及流处理。 4. RTP/TCP与RTP/UDP模式 RTP/TCP模式下,RTP数据包被封装在TCP连接中,保证了数据的可靠传输,但...

    自考java 04747《Java语言程序设计(一)》教材电子版

    《Java语言程序设计(一)》是自考Java专业的一门重要课程,旨在帮助学习者掌握Java编程的基础知识和技能。这门课程涵盖了Java语言的基本语法、数据类型、控制结构、类与对象、异常处理、输入输出以及简单的多线程...

    Java读取json文件并对json数据进行读取、添加、删除与修改操作

    开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。

    java开源包10

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    Java实现软键盘代码,HOOK调用

    - **Java代理(Proxy)**: 通过代理类,可以在方法调用前后插入自定义的处理逻辑,实现类似Hook的效果。这可能被用来拦截键盘事件的处理。 - **第三方库**: 如JNA(Java Native Access)或JNI(Java Native ...

    java调用json参数的webservice

    在Java客户端,创建了一个JSON格式的字符串作为参数,然后通过WebService的客户端代理类SayHelloService的实例,调用其getSayHelloPort方法得到服务端点SayHelloDelegate的实例。通过这个实例,调用sayHaha方法并将...

    nc文件读写 java版本

    NetCDF(Network ...通过学习这些知识点,你可以掌握Java环境下如何处理NetCDF文件,从而在气象学、环境科学等领域进行数据分析和处理。如果有任何疑问,可以联系提供的邮箱地址`lishirongtech@126.com`寻求帮助。

Global site tag (gtag.js) - Google Analytics