代理模式在Spring中,运用的淋漓精致,面向切面的编程,变得很有趣
假设有个实际书籍供应商,网上书籍供应商,而网上书籍供应商是代理商
-
package
com.study.proxy;
-
-
public
interface
Subject {
-
public
void
sailBook();
-
}
package com.study.proxy;
-
-
public
class
RealSubject
implements
Subject {
-
-
@Override
-
public
void
sailBook() {
-
System.out.println("卖书"
);
-
}
-
-
}
网上代理商代理类:
-
package
com.study.proxy;
-
-
import
java.lang.reflect.InvocationHandler;
-
import
java.lang.reflect.Method;
-
import
java.util.Date;
-
-
public
class
MyHandler
implements
InvocationHandler {
-
-
private
Object realSub =
null
;
-
public
void
setSub(Object sub){
-
this
.realSub = sub;
-
}
-
-
@Override
-
public
Object invoke(Object proxy, Method method, Object[] args)
-
throws
Throwable {
-
if
(
this
.realSub==
null
){
-
System.out.println("你无权操作"
);
-
return
null
;
-
}else
{
-
String dazhe = DaZhe();
-
System.out.println(dazhe);
-
Object rtObj = method.invoke(realSub, args);
-
String give = Give();
-
System.out.println(give);
-
String log = dazhe+give+new
Date();
-
System.out.println(log);
-
return
rtObj;
-
}
-
-
}
-
private
String DaZhe(){
-
return
"打折信息"
;
-
}
-
-
private
String Give(){
-
return
"送代金券"
;
-
}
-
-
}
客户端,测试类
-
package
com.study.proxy;
-
-
import
java.lang.reflect.Proxy;
-
-
public
class
Client {
-
-
public
static
void
main(String[] args) {
-
Subject sub = new
RealSubject();
-
MyHandler handler1 = new
MyHandler();
-
MyHandler handler2 = new
MyHandler();
-
handler1.setSub(sub);
-
Subject proxySub1 = (Subject) Proxy.newProxyInstance(
-
RealSubject.class
.getClassLoader(),
-
RealSubject.class
.getInterfaces(), handler1);
-
Subject proxySub2 = (Subject) Proxy.newProxyInstance(
-
RealSubject.class
.getClassLoader(),
-
RealSubject.class
.getInterfaces(), handler2);
-
proxySub1.sailBook();
-
proxySub2.sailBook();
-
}
-
-
}
分享到:
相关推荐
这在诸如元编程、动态代理或自定义构建系统等场景中非常有用。 要使用JavaCompiler,首先需要获取`ToolProvider`的实例,这是访问所有工具(包括JavaCompiler)的入口点: ```java JavaCompiler compiler = ...
CGlib是Java编程语言中的一个库,主要用于创建子类,也称为子类代理或动态代理。这个库在很多场合被广泛使用,特别是在那些需要在运行时动态创建对象或增强已有对象功能的场景下,比如Spring AOP(面向切面编程)...
- 《漫谈设计模式:从面向对象开始》:介绍了设计模式,对于软件设计至关重要,尤其是单例、工厂和代理模式。 - 《Spring 3.0就这么简单》:适合初学者快速掌握Spring框架的入门书籍。 - 《Java并发编程实战》:...
14. RabbitMQ:是消息代理软件,用于实现系统之间的异步通信,介绍了如何使用RabbitMQ以及其核心概念,比如交换机、队列、绑定等。 15. Kafka:作为高性能的分布式消息系统,Kafka用于构建实时的数据管道和流应用...
CORBA,全称为Common Object Request Broker Architecture,即公共对象请求代理体系结构,是由Object Management Group(OMG)制定的一项标准。其核心目标在于实现不同编程语言编写的应用程序在异构环境下进行通信的...
《永恒之塔》是一款由韩国NCsoft公司开发的大型多人在线角色扮演游戏(MMORPG),在中国大陆由盛趣游戏代理运营。这款游戏以其独特的飞行战斗系统、华丽的画面以及丰富的职业种族设定深受玩家喜爱。标题中的“官方...
7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 适用场景:在需要控制对一个对象的访问时;当无法或不想直接引用一个对象,或者访问一个对象存在开销时。 行为型模式主要包括: 1. 责任链...
一、Web服务器与反向代理 1. Nginx:作为一款高性能的HTTP和反向代理服务器,Nginx以其轻量级、高并发的特点被广泛应用。它能有效地处理静态资源,同时通过反向代理和负载均衡功能分发请求到不同的后端服务。 2. ...
4. **AOP代理**: Spring提供JDK动态代理和CGLIB代理来实现AOP。前者用于接口,后者用于类。 5. **数据访问/集成**: 包括JDBC、ORM(Object-Relational Mapping,如Hibernate)、OXM(Object-XML Mapping,如JAXB)等...
Retrofit2.0用了动态代理技术,通过解析注解生成Http请求,把请求交给OkHttp,然后通过我们设置的ConverterFactory进行serialization和deserialization,最后通过CallAdapter把结果进行进一步适配,实现了对Rxjava,...
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...
所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...
Android HTTP服务器通常基于Java的HTTP服务器实现,如NanoHTTPD或Jetty等。 描述中的“转载 咪当我系欧巴 代码,原始链接在http://download.csdn.net/detail/hellogv/4047134”表明这个项目可能是从某位名为“咪当...
2. **方法安全** - 使用AOP(面向切面编程)模式实现安全代理,可以对方法调用进行安全控制。Spring Security 还提供了一种表达式语言,允许在配置中定义访问规则,实现对Web和方法访问的灵活控制。 **配置Spring ...
任何未经过书面许可的复制、转载行为都将受到法律追究。 - **公司简介**: 上海驻云信息科技有限公司是一家专业的公有云架构技术及咨询服务提供商,专注于为企业提供全面的云解决方案和技术支持。公司具备强大的技术...
Nginx的反向代理 http://www.cnblogs.com/zhrxidian/p/5491285.html tomcat+nginx+redis实现均衡负载、session共享(二) 今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,...
+ 添加对用户定义反射加载...版权声明:本文为CSDN博主「a19770310」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/a19770310/article/details/120541758
Google 网站上提供了goole search client api for Java和for dot.net的版本,大家可以参考. For C/C++的版本特点如下 内置XML解析器. 内置gbk/utf-8编码/解码器(包含GBK编码表) 采用Pure C编写,采用标准C接口. ...