`
windywindy
  • 浏览: 170205 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用JDK创建代理类

阅读更多
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.dao.impl.PersonDaoImpl;

//当目标类实现了接口,我们可以使用jdk的Proxy来生成代理对象。
public class JDKProxyFactory implements InvocationHandler{  
    private Object targetObject;  
      
    public Object createProxyIntance(Object targetObject){  
        this.targetObject = targetObject;  
        /*
        * 第一个参数设置代码使用的类装载器,一般采用跟目标类相同的类装载器
        * 第二个参数设置代理类实现的接口
        * 第三个参数设置回调对象,当代理对象的方法被调用时,会委派给该参数指定对象的invoke方法
        */
        return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),   
                this.targetObject.getClass().getInterfaces(), this);  
    }  
  
    public Object invoke(Object proxy, Method method, Object[] args)  
            throws Throwable {
    	PersonDaoImpl bean = (PersonDaoImpl) this.targetObject;  
        Object result = null;   
        if(bean.getUser()!=null){  
           
            try {  
                result = method.invoke(targetObject, args);  
              
            } catch (RuntimeException e) {  
               
            }finally{  
              
            }  
        }  
        return result;  
    }  
  
}  
分享到:
评论

相关推荐

    JDK动态代理_JDK动态代理

    下面是一个简单的示例,演示了如何使用JDK动态代理为一个接口创建代理对象,并在方法调用前后添加日志记录功能。 ```java /** * 业务接口 */ public interface IHello { void hello(String name); } /** * ...

    CGLIB 和 JDK生成动态代理类的区别

    使用便利性上,JDK动态代理的API相对简洁,只需要实现InvocationHandler接口并调用Proxy.newProxyInstance()方法即可创建代理对象。而CGLIB的使用稍微复杂一些,需要通过Enhancer类配置回调函数和目标对象,然后调用...

    关于jdk动态代理的源码剖析

    动态代理类是由JDK自动生成的类,它的结构主要包括以下几个方面: 1. **代理类继承自`Proxy`类**:每一个动态代理类都是`Proxy`类的子类,这意味着它们继承了`Proxy`类中的所有属性和方法。 2. **代理类实现了目标...

    浅谈JDK动态代理与CGLIB代理去区别

    JDK动态代理的局限性在于,它只能为实现了至少一个接口的类创建代理,因为代理对象必须继承自这些接口。这种方式适用于那些基于接口进行编程的设计,比如Spring AOP中的Advisor和Advice。 相反,CGLIB(Code ...

    java代理机制 JDK动态代理和cglib代理 详解

    CGLIB(Code Generation Library)是另一个常用的Java代理库,它不需要目标类实现任何接口,而是通过继承的方式创建代理类。CGLIB使用ASM库在运行时动态生成字节码,创建目标类的子类,从而实现对目标类方法的增强。...

    jdk动态代理技术详解

    Proxy 类是 JDK 中的动态代理类,是动态代理的核心类,其作用类似于代理模式中的代理。Proxy 类中包含的全是静态的方法和成员变量,这是一个纯粹的工具类,因此其源代码中含有一个私有的构造器,在某种意义上可以看...

    JDK动态代理 spring aop 的原理

    2. 创建代理类:使用Proxy类的静态方法`newProxyInstance()`,传入三个参数:目标对象的类加载器、目标对象实现的接口列表以及上一步实现的InvocationHandler实例。这将返回一个新的代理对象,该对象实现了与目标...

    JDK动态代理源码

    3. **不同类,不同方法的代理**:在描述中提到的“不同类,不同方法的代理”意味着JDK动态代理可以为任何实现了相同接口的类创建代理,而不仅仅是单一类。这得益于`InvocationHandler`的灵活性,它可以处理任何接口...

    JDK动态代理简单示例

    JDK动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建具有特定接口的代理类实例。这种技术在很多场景下都非常有用,比如在AOP(面向切面编程)中实现方法拦截、日志记录、事务管理等。下面我们将深入...

    spring jdk动态代理

    在Java中,动态代理是一种在运行时创建代理类的能力,它允许我们为一组接口创建代理对象,这些代理对象可以拦截并处理方法调用。核心接口是`java.lang.reflect.InvocationHandler`,它定义了处理方法调用的逻辑;另...

    代理模式,JDK动态代理,SpringAOP来龙去脉

    - 分析JDK动态代理的源码,可以了解其内部如何生成代理类和调用处理程序的工作机制。 - Spring AOP的源码解析有助于理解其是如何创建代理、匹配切点并执行相应通知的过程。 5. **工具应用**: - JDK动态代理和...

    JDK动态代理proxy

    JDK动态代理,全称为Java Dynamic Proxy,是Java标准库提供的一种强大且灵活的机制,允许我们在运行时创建代理类来实现指定的接口。这种机制主要用于实现AOP(面向切面编程)或为已有接口提供额外的功能,如日志、...

    JDK代理和Cglib代理

    总结来说,JDK代理和Cglib代理都是为了在运行时动态创建代理对象,以扩展或修改已有对象的行为。选择哪种方式取决于具体的需求,如目标对象是否实现接口、性能要求、兼容性等因素。在实际开发中,Spring框架就同时...

    模拟JDK动态代理内部实现

    2. **生成代理对象**: 使用`Proxy.newProxyInstance()`静态方法可以创建代理对象。这个方法需要三个参数:被代理的接口列表、一个`ClassLoader`以及我们的`InvocationHandler`实例。`ClassLoader`用于加载接口的类,...

    jdk动态代理和CGlib动态代理

    1. **Proxy类**:这是JDK动态代理的核心类,它提供了`newProxyInstance()`静态方法,用于创建代理对象。 2. **InvocationHandler接口**:每个代理对象都关联一个`InvocationHandler`实例。当代理对象的方法被调用时...

    JDK动态代理和CGLIB代理

    CGLIB使用ASM库来生成和加载代理类的字节码。 使用CGLIB代理通常需要引入cglib库,然后通过`MethodInterceptor`接口和`Enhancer`类来实现。以下是一个CGLIB代理的例子: ```java import ...

    静态代理、jdk动态代理、cglib动态代理

    在 JDK 动态代理中,我们不需要在编译时创建代理类,而是使用 Java 反射机制在运行时动态创建代理对象。 JDK 动态代理的实现方式是:我们首先需要定义一个接口,然后创建一个实现该接口的类,该类将作为被代理的...

    java jdk 动态代理 演示demo

    3. 使用`Proxy.newProxyInstance()`方法创建代理对象,传入接口、类加载器和自定义的`InvocationHandler`实例。 4. 通过代理对象调用方法,实际执行逻辑将在`InvocationHandler.invoke()`中进行。 下面是一个简单的...

    java 动态代理实例(JDK代理与CGLIB代理)

    2. **创建Enhancer对象**:`net.sf.cglib.proxy.Enhancer`是CGLIB的核心类,用于创建代理对象。 3. **设置回调**:使用`setCallback`或`setCallbacks`方法指定回调策略,通常使用`MethodInterceptor`接口,实现`...

Global site tag (gtag.js) - Google Analytics