`
ynshun
  • 浏览: 91457 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

java代理【转载】

    博客分类:
  • java
 
阅读更多

代理模式在Spring中,运用的淋漓精致,面向切面的编程,变得很有趣

 

假设有个实际书籍供应商,网上书籍供应商,而网上书籍供应商是代理商

 

 

Java代码  收藏代码
  1. package  com.study.proxy;  
  2.   
  3. public   interface  Subject {  
  4.     public   void  sailBook();  
  5. }  

 package com.study.proxy;

 

Java代码  收藏代码
  1. //真实卖家,最初卖家   
  2. public   class  RealSubject  implements  Subject {  
  3.   
  4.     @Override   
  5.     public   void  sailBook() {  
  6.         System.out.println("卖书" );  
  7.     }  
  8.   
  9. }  

网上代理商代理类:

 

Java代码  收藏代码
  1. package  com.study.proxy;  
  2.   
  3. import  java.lang.reflect.InvocationHandler;  
  4. import  java.lang.reflect.Method;  
  5. import  java.util.Date;  
  6. //代理商   
  7. public   class  MyHandler  implements  InvocationHandler {  
  8.       
  9.     private  Object realSub =  null ;  
  10.     public   void  setSub(Object sub){  
  11.         this .realSub = sub;  
  12.     }  
  13.       
  14.     @Override   
  15.     public  Object invoke(Object proxy, Method method, Object[] args)  
  16.             throws  Throwable {  
  17.         if ( this .realSub== null ){  
  18.             System.out.println("你无权操作" ); //判断权限   
  19.             return   null ;  
  20.         }else {  
  21.             String dazhe = DaZhe();  
  22.             System.out.println(dazhe);  
  23.             Object rtObj = method.invoke(realSub, args);  
  24.             String give = Give();  
  25.             System.out.println(give);  
  26.             String log = dazhe+give+new  Date();  
  27.             System.out.println(log);  
  28.             return  rtObj;  
  29.         }  
  30.           
  31.     }  
  32.     private  String DaZhe(){  
  33.         return   "打折信息" ;  
  34.     }  
  35.       
  36.     private  String Give(){  
  37.         return   "送代金券" ;  
  38.     }  
  39.       
  40. }  

 

 客户端,测试类

 

Java代码  收藏代码
  1. package  com.study.proxy;  
  2.   
  3. import  java.lang.reflect.Proxy;  
  4.   
  5. public   class  Client {  
  6.   
  7.     public   static   void  main(String[] args) {  
  8.         Subject sub = new  RealSubject();  
  9.         MyHandler handler1 = new  MyHandler();  
  10.         MyHandler handler2 = new  MyHandler();  
  11.         handler1.setSub(sub);  
  12.         Subject proxySub1 = (Subject) Proxy.newProxyInstance(  
  13.                 RealSubject.class .getClassLoader(),  
  14.                 RealSubject.class .getInterfaces(), handler1);  
  15.         Subject proxySub2 = (Subject) Proxy.newProxyInstance(  
  16.                 RealSubject.class .getClassLoader(),  
  17.                 RealSubject.class .getInterfaces(), handler2);  
  18.         proxySub1.sailBook();  
  19.         proxySub2.sailBook();  
  20.     }  
  21.   

分享到:
评论

相关推荐

    通过JavaCompiler进行编译java文件(转载)

    这在诸如元编程、动态代理或自定义构建系统等场景中非常有用。 要使用JavaCompiler,首先需要获取`ToolProvider`的实例,这是访问所有工具(包括JavaCompiler)的入口点: ```java JavaCompiler compiler = ...

    转载:cglib动态代理介绍(一)

    CGlib是Java编程语言中的一个库,主要用于创建子类,也称为子类代理或动态代理。这个库在很多场合被广泛使用,特别是在那些需要在运行时动态创建对象或增强已有对象功能的场景下,比如Spring AOP(面向切面编程)...

    Java工程师新人入门书籍推荐

    - 《漫谈设计模式:从面向对象开始》:介绍了设计模式,对于软件设计至关重要,尤其是单例、工厂和代理模式。 - 《Spring 3.0就这么简单》:适合初学者快速掌握Spring框架的入门书籍。 - 《Java并发编程实战》:...

    Java 最常见 200+ 面试题全解析:面试必备.pdf

    14. RabbitMQ:是消息代理软件,用于实现系统之间的异步通信,介绍了如何使用RabbitMQ以及其核心概念,比如交换机、队列、绑定等。 15. Kafka:作为高性能的分布式消息系统,Kafka用于构建实时的数据管道和流应用...

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    CORBA,全称为Common Object Request Broker Architecture,即公共对象请求代理体系结构,是由Object Management Group(OMG)制定的一项标准。其核心目标在于实现不同编程语言编写的应用程序在异构环境下进行通信的...

    官方转载的永恒之塔屏保

    《永恒之塔》是一款由韩国NCsoft公司开发的大型多人在线角色扮演游戏(MMORPG),在中国大陆由盛趣游戏代理运营。这款游戏以其独特的飞行战斗系统、华丽的画面以及丰富的职业种族设定深受玩家喜爱。标题中的“官方...

    Java23种设计模式

    7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 适用场景:在需要控制对一个对象的访问时;当无法或不想直接引用一个对象,或者访问一个对象存在开销时。 行为型模式主要包括: 1. 责任链...

    使用open source产品组装你的web应用架构(转载)

    一、Web服务器与反向代理 1. Nginx:作为一款高性能的HTTP和反向代理服务器,Nginx以其轻量级、高并发的特点被广泛应用。它能有效地处理静态资源,同时通过反向代理和负载均衡功能分发请求到不同的后端服务。 2. ...

    (转载)自己动手写一个spring

    4. **AOP代理**: Spring提供JDK动态代理和CGLIB代理来实现AOP。前者用于接口,后者用于类。 5. **数据访问/集成**: 包括JDBC、ORM(Object-Relational Mapping,如Hibernate)、OXM(Object-XML Mapping,如JAXB)等...

    网络请求 retrofit

    Retrofit2.0用了动态代理技术,通过解析注解生成Http请求,把请求交给OkHttp,然后通过我们设置的ConverterFactory进行serialization和deserialization,最后通过CallAdapter把结果进行进一步适配,实现了对Rxjava,...

    收集的常见的专业问题解决办法.rar

    2009-03-05 14:06 155509 34856 常见的专业问题解决办法\html中rel与rev的关系(转载)_我的幅度.mht 2009-03-05 19:33 232863 45314 常见的专业问题解决办法\Html标签大全_破巢.mht 2006-11-01 21:11 107135 101736...

    二十三种设计模式【PDF版】

    所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...

    android http server

    Android HTTP服务器通常基于Java的HTTP服务器实现,如NanoHTTPD或Jetty等。 描述中的“转载 咪当我系欧巴 代码,原始链接在http://download.csdn.net/detail/hellogv/4047134”表明这个项目可能是从某位名为“咪当...

    Spring-Security-3应用的11个步骤.docx

    2. **方法安全** - 使用AOP(面向切面编程)模式实现安全代理,可以对方法调用进行安全控制。Spring Security 还提供了一种表达式语言,允许在配置中定义访问规则,实现对Web和方法访问的灵活控制。 **配置Spring ...

    Linux一键安装web环境全攻略

    任何未经过书面许可的复制、转载行为都将受到法律追究。 - **公司简介**: 上海驻云信息科技有限公司是一家专业的公有云架构技术及咨询服务提供商,专注于为企业提供全面的云解决方案和技术支持。公司具备强大的技术...

    Nginx安装包

    Nginx的反向代理 http://www.cnblogs.com/zhrxidian/p/5491285.html tomcat+nginx+redis实现均衡负载、session共享(二) 今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,...

    cobaltstrike_release-20210907.7z

    + 添加对用户定义反射加载...版权声明:本文为CSDN博主「a19770310」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/a19770310/article/details/120541758

    google search client api for c/c++

    Google 网站上提供了goole search client api for Java和for dot.net的版本,大家可以参考. For C/C++的版本特点如下 内置XML解析器. 内置gbk/utf-8编码/解码器(包含GBK编码表) 采用Pure C编写,采用标准C接口. ...

Global site tag (gtag.js) - Google Analytics