`
yuexiaodong
  • 浏览: 70210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单反射代理

阅读更多

有时候需要对已有的类进行前后加入一些操作,这样的需求通过代理类很容易实现,下面就是我实现一个对数据库连接进行的简单代理实现,达到对SQL进行监视的目的,其实这样的功能用第三方的控件很容易实现,这样做的目的就是学习而已;

需要代理的类:java.sql.Connection 

 

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;

import jxl.common.Logger;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Xiaodong.Yue
 *
 */
public class DebugConnection implements InvocationHandler {
 
	private final static Log log = LogFactory.getLog(DebugConnection.class);
	  
	private Connection conn = null;

	public DebugConnection(Connection conn) {
		this.conn = conn;
	}
	/**
	 * Returns the conn.
	 * @return Connection
	 */
	public Connection getConnection(){
		return (Connection) Proxy.newProxyInstance(conn.getClass().getClassLoader(), conn.getClass().getInterfaces(), this);
	}

	/* (non-Javadoc)
	 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
	 */
	public Object invoke(Object proxy, Method m, Object[] args)
			throws Throwable {		
		try {
			String method = m.getName();
			 // 对一些方法进行监视
			if("prepareStatement".equals(method) ||"prepareCall".equals(method))
			{	           
				log.debug("[OEPSMWS-SQL] >>> " + args[0]);				
			}				 
			return m.invoke(conn, args);
		} catch (InvocationTargetException e) {
			logger.error(e.getMessage());
			throw e.getTargetException();
		}
	}

}

实现效果:

DEBUG - [OEPSMWS-SQL] >>> select id, name from profwork where parentid = ?  

  

这样就可以达到自己定制的信息显示了,其他类似的场景很多,其实都可以通过这样的形式实现。

之后再要能把SQL参数加进去就好了,以后研究;

分享到:
评论

相关推荐

    利用反射和代理实现简单的Spring

    现在,我们来看看如何利用反射和代理实现一个简单的Spring: 1. **依赖注入**:首先,我们需要一个配置类,其中包含bean的定义。这些定义可以是注解形式,如`@Component`,也可以是XML配置。在运行时,通过反射解析...

    简单的反射例子

    在探讨“简单的反射例子”这一主题时,我们深入解析了反射在C#中的应用,以及如何利用反射来访问和操作对象的属性。反射是.NET框架中的一个强大特性,它允许程序在运行时检查和调用类型的信息,包括类型、方法、属性...

    php 反射简单例子

    - AOP(面向切面编程):反射可以实现动态代理,实现方法拦截和日志记录等功能。 总之,PHP反射提供了一种强大的手段来探索和操作程序的内部结构,虽然它的使用可能会增加代码的复杂性,但在某些高级场景下,反射能...

    反射技术+简单工厂模式

    在实际应用中,反射技术常用于插件系统、框架开发、动态代理以及在未知类型的情况下调用方法或访问属性等场景。使用反射可以增加程序的灵活性,但同时也可能带来性能损失和安全风险,因此在使用时需谨慎。 简单工厂...

    Java动态代理和Java反射的Demo演示

    Java动态代理和反射是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将通过实例演示这两种技术,并详细解释它们的工作原理。 首先,我们来了解一下Java动态代理。动态代理主要...

    利用反射和动态代理机制实现自定义拦截器Interceptor

    利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...

    JAVA反射简单例子

    - **AOP(面向切面编程)**: Spring AOP通过代理模式实现,反射用于在运行时动态创建代理对象,实现切面逻辑。 8. **注意事项** - 反射操作比常规操作慢,应谨慎使用,避免性能瓶颈。 - 反射可能导致安全问题,...

    反射和动态代理

    以一个简单的例子说明动态代理的使用: ```java interface MyService { void doSomething(); } class MyServiceImpl implements MyService { @Override public void doSomething() { System.out.println(...

    基于Java动态代理和反射机制实现ORM

    本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和反射的基本概念。动态代理是在运行时创建一个接口的实现类,这个实现类会调用...

    Java反射机制与动态代理

    总结起来,Java反射机制和动态代理是强大的编程工具,它们允许程序员在运行时探索和操作类的内部结构,实现动态行为和扩展功能。然而,使用时应谨慎,因为它们也可能引入性能问题和安全风险。在适当的情况下,反射和...

    Java反射及动态代理

    以下是一个简单的代理模式代码举例: ```java interface MyInterface { void doSomething(); } class RealObject implements MyInterface { @Override public void doSomething() { System.out.println("Real ...

    java反射和动态代理实例

    以下是一个简单的动态代理示例: ```java interface MyService { void doSomething(); } class RealService implements MyService { @Override public void doSomething() { System.out.println("Real Service...

    JAVA简单的反射案例

    在本篇文章中,我们将探讨Java反射的基本概念、如何使用以及其在实际开发中的应用,结合“JAVA简单的反射案例”这一主题。 1. **什么是Java反射**: Java反射机制允许我们在运行时动态地获取类的信息(如类名、...

    简单工厂反射.zip

    简单工厂模式和反射是Java编程中的重要概念,它们在软件设计和实现中起着关键作用。这个名为"简单工厂反射.zip"的压缩包文件显然包含了关于这两个主题的教学资源,包括视频教程和源代码实例,非常适合程序员们自我...

    反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) - Java 例子 -

    以下是一个简单的动态代理实现示例: ```java public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @...

    java反射简单例子demo

    1. 动态代理:通过反射创建代理对象,实现接口,从而在运行时动态添加业务逻辑。 2. 数据库持久化框架:如Hibernate,利用反射操作数据库对象的属性,实现ORM(对象关系映射)。 3. 字符串拼接优化:StringBuilder的...

Global site tag (gtag.js) - Google Analytics