IUserDao.java
package org.wcy.spring.proxy.dynimic;
public interface IUserDao {
public void add();
}
UserDao.java
package org.wcy.spring.proxy.dynimic;
public class UserDao implements IUserDao {
@Override
public void add() {
System.out.println("user add!");
}
}
LogProxy.java
package org.wcy.spring.proxy.dynimic;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
public class LogProxy implements InvocationHandler {
//被代理对象
private Object instance;
public Object getInstance(Object obj) {
//newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this)是Proxy类的静态方法
//obj.getClass().getClassLoader(),用哪个类来产生代理对象
//obj.getClass().getInterfaces(),代理类要实现的接口,根据传入的接口类型,动态构造出一个代理实例返回
//第三个参数,调用代理方法时,要用哪个handler进行处理
Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
instance = obj;
return o;
}
//invoke方法将会在代理类的方法执行之前触发,通过这个方法我们可以在被代理类方法前后做一些操作。
@Override
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
System.out.println("log");
return method.invoke(instance, args);
}
}
Test.java
package org.wcy.spring.proxy.dynimic;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
IUserDao userDao = (IUserDao)new LogProxy().getInstance(new UserDao());
userDao.add();
}
}
分享到:
相关推荐
Java JDK动态代理实现原理实例解析 Java JDK动态代理实现原理实例解析是指通过Java JDK提供的代理机制来实现动态代理的原理和实例解析。动态代理是一种非常重要的设计模式,它可以在运行时生成代理类,从而实现了...
4. **底层实现原理**: - **JDK代理**:JDK动态代理使用反射和InvocationHandler接口生成一个实现了目标接口的新类。在运行时,这个新类的实例作为代理对象,它的方法调用都会转发到InvocationHandler的`invoke()`...
本文将深入探讨如何在基于Maven的项目中利用CGLib库实现动态代理。CGLib(Code Generation Library)是Java中一个高性能的代码生成库,它在运行期通过字节码技术为类创建子类,以此实现动态代理。 1. Maven项目配置...
动态代理是实现AOP的一种常用技术,它允许在运行时创建代理对象,拦截对真实对象的调用,并在调用前后添加额外的行为。 在Java开发中,反射机制是实现动态代理的关键技术之一。反射提供了在运行时访问和操作类的...
缺点是只能代理实现了接口的类。 - CGLIB动态代理:优点是可以代理没有接口的类,灵活性更高;缺点是性能稍逊于JDK动态代理,且代码稍显复杂。 了解和掌握动态代理的原理和实现方式,对于提升Java开发的灵活性和...
在学习和应用IOC框架,尤其是通过动态代理实现时,我们需要了解以下知识点: 1. IOC的基本原理和实现机制,包括依赖注入(Dependency Injection)的概念。 2. 如何配置IOC容器,如XML配置或注解配置。 3. 如何使用...
本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...
以下是JDK动态代理的基本工作原理: 1. **InvocationHandler接口**:这是处理代理对象方法调用的关键接口,定义了一个`invoke()`方法,当调用代理对象的方法时,实际上会调用`invoke()`方法。 2. **Proxy类**:...
动态代理主要有两种实现方式:JDK自带的`java.lang.reflect.Proxy`类和`java.lang.invoke.MethodHandle`API。这里主要讨论JDK的Proxy类,因为这是最常见且相对简单的实现方式。 1. **Proxy类的使用** - **Proxy....
本文将由浅入深地分析 MyBatis 如何通过动态代理实现拦截器的原理。 首先,我们需要了解动态代理的概念。在 Java 中,动态代理是通过 `java.lang.reflect.Proxy` 类和 `java.lang.reflect.InvocationHandler` 接口...
CGlib动态代理的工作原理是通过继承被代理的目标类来创建子类,然后在子类中覆盖父类的方法,当调用这些方法时,会插入自定义的逻辑。与JDK的动态代理不同,JDK代理基于接口,如果目标类没有实现接口,就无法使用JDK...
现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象,...
Spring AOP 的底层实现技术 --- Jdk 动态代理原理 JDK 动态代理是 Spring AOP 的底层实现技术,允许开发者在运行期创建接口的代理实例。在 JDK 1.3 以后,JDK 动态代理技术提供了实现 AOP 的绝好底层技术。JDK 动态...
动态代理的实现原理,以及详细的注释和错误分析,理解动态代理的机制
JDK动态代理的底层实现原理
### Java动态代理的实现原理 Java动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类提供了创建动态代理对象的方法,而`InvocationHandler`则定义了代理对象...
动态代理提供了创建代理对象的机制,而Spring AOP则是基于动态代理实现的面向切面编程框架,简化了在多处插入相同逻辑的复杂度。在实际开发中,理解并熟练运用这两个技术对于提高代码质量和可维护性至关重要。