`
huangenhui533
  • 浏览: 5144 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

动态代理(Dynamic Proxy)

阅读更多
一 。先定义一个接口
public interface User {
public void addUser(String username, String password);
public void deleteUser(int id);
}

二。实现User接口
public class UserImpl implements User {

public void addUser(String username, String password) {
System.out.println("-----------addUser----------");
}

public void deleteUser(int id) {
System.out.println("-----------deleteUser----------");
}

}

三。有业务需求时,我们要进行改造,比方说要增加安全检测对每个addUser和deleteUser方法,为了不使原代码的破坏性,我们要新增加代理来进行处理这个安全检测(新增加一个类远比修改原类代码简单的多),只是一个代理,并不破坏原类,代理我们可以分为动态代理和静态代理,静态代理有失一些扩展性,在此,我们采用动态代理,步骤如下:
1.实现InvocationHandler接口
2.实现invoke方法
public class SecurityCheck implements InvocationHandler {
private Object ob;

public Object newProxy(Object ob){
this.ob = ob;
return Proxy.newProxyInstance(ob.getClass().getClassLoader(), ob.getClass().getInterfaces(), this); 
}
public Object invoke(Object a, Method method, Object[] args)
throws Throwable {
try{
checkSecurity();
Object ret = (Object)method.invoke(ob, args);
return ret;
}catch(Exception e ){
e.printStackTrace();
}
return null;
}

private void checkSecurity(){
System.out.println("-----------Security check------------");
}
}

四。测试类
/**
* @param args
*/
public static void main(String[] args) {
//UserImpl userImpl = new UserImpl();
SecurityCheck proxy= new SecurityCheck();
User  user = (User)proxy.newProxy(new UserImpl());
user.addUser("", "");
}

控制台打印出
-----------Security check------------
-----------addUser----------

分享到:
评论

相关推荐

    Castle Dynamic Proxy代理使用

    using Castle.DynamicProxy; public class SimpleSamepleEntity { public virtual string Name { get; set; } public virtual int Age { get; set; } public override string ToString() { return string....

    反射与动态代理Reflection&DynamicProxy.zip

    Java反射(Reflection)和动态代理(Dynamic Proxy)是Java编程中的高级特性,它们为程序提供了强大的功能和灵活性。本文将深入探讨这两个主题,并通过源码分析来加深理解。 首先,让我们了解一下Java反射。反射机制...

    SpringIOC,DI+dynamic proxy 实现盗版AOP

    本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...

    08spring4_dynamicproxy.rar

    package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...

    WCF.rar_ChannelFactory_WCF DynamicProxy_WCF 动态_wcf 动态调用_动态WCF

    在WCF中,可以使用`Castle.DynamicProxy`库或者.NET Framework的`System.Reflection.Emit`命名空间来创建动态代理,从而在调用WCF服务时添加日志、事务控制等特性,而无需修改服务契约接口。 **WCF动态调用** 是指...

    Castle.DynamicProxy.zip

    Castle.DynamicProxy是一个强大的动态代理库,它允许我们在运行时创建类的代理,这些代理可以拦截并处理方法调用、属性访问等。通过使用Castle.DynamicProxy,我们可以创建一个动态代理类,该类将作为IBatisNET中的...

    java reflect and dynamic proxy .Java反射和动态代理

    **Java动态代理(Dynamic Proxy)** Java动态代理是Java提供的一种机制,可以在运行时创建具有特定接口的代理类。这通常用于实现AOP(面向切面编程)或事件处理等。主要由java.lang.reflect.Proxy和java.lang....

    DynamicProxy

    这是动态代理的简单实例,方便学,入手.这个例子非常的简单哦!

    JDK动态代理proxy

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

    Java动态代理语法Proxy类原理详解

    在上面的示例中,我们定义了一个动态代理类DynamicProxy,它实现了InvocationHandler接口。我们可以通过DynamicProxy对象来代理RealSubject对象,并对其方法调用进行处理和修改。 四、结论 Java动态代理语法Proxy...

    Dynamic Proxy

    绿色软件,无需安装,可以自动添加、修改代理服务器ip地址

    静态代理和动态代理

    Service dynamicProxy = (Service) Proxy.newProxyInstance( Service.class.getClassLoader(), new Class[]{Service.class}, new DynamicProxy(new RealService()) ); dynamicProxy.doSomething(); ``` 动态...

    LinFu.DynamicProxy.dll

    如果使用LinFu.DynamicProxy动态代理,引用NHibernate.ByteCode.LinFu.dll程序集并配置proxyfactory.factory_class节点为 <property name="proxyfactory.factory_class"> NHibernate.ByteCode.LinFu....

    dynamic-proxy-demo.zip

    在这个“dynamic-proxy-demo.zip”压缩包中,我们可能找到了关于这两种代理模式的示例代码。 首先,让我们来深入理解动态代理和静态代理的概念。 **静态代理:** 静态代理是最基础的形式,它通过创建目标对象的...

    Java静态代理与动态代理demo

    在动态代理中,我们创建了一个 `DynamicProxy` 类实现 `InvocationHandler` 接口,然后使用 `Proxy.newProxyInstance()` 方法创建代理对象。`invoke()` 方法会拦截所有对代理对象的方法调用,从而可以在调用前后添加...

    DynamicProxy:一个简单实用的JDK动态代理演示

    `Proxy` 类是用于创建动态代理对象的工厂,而`InvocationHandler`接口则定义了代理对象如何处理方法调用的逻辑。 1. **Proxy类**: `Proxy` 类提供了`newProxyInstance()`静态方法,它是创建动态代理对象的主要...

    Java动态代理Proxy和cglib

    在Java编程中,动态代理(Dynamic Proxy)是一种强大的设计模式,它允许我们在运行时创建具有特定接口的新对象。Java的动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    Service proxyService = (Service) DynamicProxy.getProxyInstance(realService); proxyService.doSomething(); ``` 代理模式在软件开发中有广泛的应用,例如在远程调用、事务管理、缓存控制、权限验证等场景。在...

    静态代理和动态代理简单实现代码

    在动态代理中,我们创建了一个实现了 `InvocationHandler` 接口的 `DynamicProxy` 类。`invoke()` 方法是关键,它会在调用真实对象的方法之前和之后添加额外的逻辑。使用 `Proxy.newProxyInstance()` 可以生成一个...

    DynamicProxy源码

    动态代理(DynamicProxy)是Java中一种强大的设计模式,它允许在运行时创建代理对象,这些代理对象可以作为原对象的“代理”,在调用原对象的方法时添加额外的功能,如日志、性能监控、事务处理等。在Java中,`java....

Global site tag (gtag.js) - Google Analytics