有时候需要对已有的类进行前后加入一些操作,这样的需求通过代理类很容易实现,下面就是我实现一个对数据库连接进行的简单代理实现,达到对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: 1. **依赖注入**:首先,我们需要一个配置类,其中包含bean的定义。这些定义可以是注解形式,如`@Component`,也可以是XML配置。在运行时,通过反射解析...
在探讨“简单的反射例子”这一主题时,我们深入解析了反射在C#中的应用,以及如何利用反射来访问和操作对象的属性。反射是.NET框架中的一个强大特性,它允许程序在运行时检查和调用类型的信息,包括类型、方法、属性...
- AOP(面向切面编程):反射可以实现动态代理,实现方法拦截和日志记录等功能。 总之,PHP反射提供了一种强大的手段来探索和操作程序的内部结构,虽然它的使用可能会增加代码的复杂性,但在某些高级场景下,反射能...
在实际应用中,反射技术常用于插件系统、框架开发、动态代理以及在未知类型的情况下调用方法或访问属性等场景。使用反射可以增加程序的灵活性,但同时也可能带来性能损失和安全风险,因此在使用时需谨慎。 简单工厂...
Java动态代理和反射是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将通过实例演示这两种技术,并详细解释它们的工作原理。 首先,我们来了解一下Java动态代理。动态代理主要...
利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...
- **AOP(面向切面编程)**: Spring AOP通过代理模式实现,反射用于在运行时动态创建代理对象,实现切面逻辑。 8. **注意事项** - 反射操作比常规操作慢,应谨慎使用,避免性能瓶颈。 - 反射可能导致安全问题,...
总之,Java的反射技术和代理模式是两种强大的工具,它们为开发者提供了更高级别的编程能力,能够应对复杂和动态的场景,但同时也需要谨慎使用,以避免潜在的风险。理解并熟练运用反射和代理,可以帮助我们编写出更...
以一个简单的例子说明动态代理的使用: ```java interface MyService { void doSomething(); } class MyServiceImpl implements MyService { @Override public void doSomething() { System.out.println(...
本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和反射的基本概念。动态代理是在运行时创建一个接口的实现类,这个实现类会调用...
总结起来,Java反射机制和动态代理是强大的编程工具,它们允许程序员在运行时探索和操作类的内部结构,实现动态行为和扩展功能。然而,使用时应谨慎,因为它们也可能引入性能问题和安全风险。在适当的情况下,反射和...
以下是一个简单的代理模式代码举例: ```java interface MyInterface { void doSomething(); } class RealObject implements MyInterface { @Override public void doSomething() { System.out.println("Real ...
以下是一个简单的动态代理示例: ```java interface MyService { void doSomething(); } class RealService implements MyService { @Override public void doSomething() { System.out.println("Real Service...
在本篇文章中,我们将探讨Java反射的基本概念、如何使用以及其在实际开发中的应用,结合“JAVA简单的反射案例”这一主题。 1. **什么是Java反射**: Java反射机制允许我们在运行时动态地获取类的信息(如类名、...
简单工厂模式和反射是Java编程中的重要概念,它们在软件设计和实现中起着关键作用。这个名为"简单工厂反射.zip"的压缩包文件显然包含了关于这两个主题的教学资源,包括视频教程和源代码实例,非常适合程序员们自我...
以下是一个简单的动态代理实现示例: ```java public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy(Object target) { this.target = target; } @...
1. 动态代理:通过反射创建代理对象,实现接口,从而在运行时动态添加业务逻辑。 2. 数据库持久化框架:如Hibernate,利用反射操作数据库对象的属性,实现ORM(对象关系映射)。 3. 字符串拼接优化:StringBuilder的...