代理模式

代理模式

动态代理

  动态代理可能为我们动态的生成代理类和代理对象;
  目前java动态代理的实现有两种:
    1.JDK的动态代理。
    2.基于CGlib的动态代理。

  JDK的动态代理:
    proxy:用来创建代理类和对象;
    InvocationHandler:调用处理器;
    Method:方法;

  JDK的动态代理的开发步骤:

  1.创建目标对象和接口(真实对象和抽象对象);
  2.创建一个InvocationHandler的实现类并实现invoke方法;
  3.通过Proxy.newProxyInstance()方法来获得代理对象;
  4.调用代理对象的方法;

  JDK动态代理的理解:

MyInvocationHandler 接口{
    invoke(){
    }
}

  真实对象
  UserService

  代理对象
  userService2=Proxy.newProxyInstance(ClassLoader,接口,MyInvocationHandler)

  当我们调用userService2.save();时,程序会调用MyInvocationHandler中的invoke方法;
  即,当我们调用代理对象的方法时,会将请求发送给InvocationHandler的invoke方法;

  相关实际类比

    真实对象  userService      servlet

    过滤器   invocationHandler  filter

    方法    invoke        doFilter

    在调用servlet之前,filter会先进行请求拦截,而相对于代理而言,则是在调用userService之前,invocationHandler会进行请求拦截。invoke之于InvocationHandler,就相当于doFilter之于filter。

  为什么要使用代理模式
  当你需要使用的一个类不在本地主机而在其他地方时,使用代理可以减少你获取该类,并且使用的时间,使用代理可以方便快捷的获取到类,而不适用则需要进行copy相关操作,非常麻烦
  为了类的单一性原则问题,通常我们在调用类时需要其他更多的操作,比如权限控制,这时我们需要尽量不在原类中编写,而在代理类中编写是一个很好地选择。

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
八极星:有什么不能问的,(/_\),这又不是多珍贵的机会,你有什么可失去的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务