jive中代理漫天飞,其中代理有两个用处,1 访问控制;2对象缓存。这两个归究还是一个问题。所以只提访问控制。
jive 做的代理思路如下:
先定义一个接口,共代理和被代理的类继承
public interface Forum {
public List getThreads();;
public String getName();;
}
有一个具体实现类(被代理类):
public class DbForum implements Forum {
private Log logger = LogFactory.getLog(this.getClass(););;
public List getThreads(); {
logger.info("正在取出论坛的帖子");;
return Arrays.asList(new String[] { "topic1", "topic1", "topic1" });;
}
public String getName(); {
logger.info("正在取出论坛的名称");;
String name = "论坛名";
return name;
}
}
第三:代理类,用于控制被访问对象DbForum
/*
* 在DbForum的方法执行前,做一些比如权限检查的操作
*/public class ForumProxy implements Forum {
private Log logger = LogFactory.getLog(this.getClass(););;
private Forum forumImpl;
private Auth auth;
public ForumProxy(Forum forumImpl, Auth auth); {
this.forumImpl = forumImpl;
this.auth = auth;
}
public List getThreads(); throws UnAuthorizedException {
if (auth.isAuthorized();); {
logger.debug("权限检测通过!");;
return forumImpl.getThreads();;
}
logger.warn("权限检测没有通过,抛出异常");;
throw new UnAuthorizedException();;
}
public String getName();{return forumImpl.getName();;}
}
使用时就是这样了:
Forum f=new DbForum();;
Auth auth=new Auth(true);;
ForumProxy fproxy=new ForumProxy(f,auth);;
try {
System.out.print(fproxy.getThreads(););;
} catch (UnAuthorizedException e); {
// 无权限
e.printStackTrace();;
}
#########################################
大家会看到,这样用代理,有好处也有坏处。
坏: 使代码量翻倍,增大了开发难度
好:使业务对象更加专注于业务逻辑,将烦琐而又必须的操作(权限检查,日志打印)转给代理类来完成。
而本文着重介绍的技术叫:动态代理,在JDK1.3后引入java,先看看动态代理是如何做上述权限控制的。
先看动态代理的Client代码:
/*
* 动态代理,将切面和被代理的业务对象完全分开
*/
// 业务对象,关注于业务细节
Object protectedObject = new DbForum();;
Auth auth=new Auth(true);;
// 切面对象,拦截业务对象方法的执行,并在被保护对象执行前后做自己的处理
InvocationHandler guarder = new Guarder(protectedObject,auth);;
/*
* 构造出的代理对象,将前两者巧妙地结合起来,你 只需去调用该对象的方法,
而实际上是调用了 切面对象的相应的方法。
*/
Forum proxy = (Forum); Proxy.newProxyInstance(protectedObject.getClass();.getClassLoader();, protectedObject.getClass();.getInterfaces();, guarder);;
List threads = proxy.getThreads();;
proxy.getName();;
看见没有,所有的烦琐的权限控制都在InvocationHandler guarder 里面呢。这个接口你得自己实现了。这个接口只有一个方法:
public Object invoke(Object proxy, Method method, Object[] args);
throws Throwable;
分享到:
相关推荐
总的来说,"Just Another Stamp Font Demo"提供了一个体验独特设计风格的机会,同时提醒我们尊重和遵守字体的使用权限。对于设计师而言,试用不同的字体是创新过程中的重要步骤,而这样的免费试用版则为他们提供了...
justadll - just a dll
【kbase-ui-plugin-demo-just-panel】是一款基于JavaScript开发的用户界面插件示例,主要用于展示如何构建和集成UI插件。这个项目的核心目标是提供一个基础模板,帮助开发者快速理解并实现自己的KBase UI插件。从...
Before starting the Kotlin-Web-Demo execute two gradle tasks: copyKotlinLibs for downloading kotlin libraries for compiler and war for building war-archive from IDE or terminal: $ gradlew ::...
5. **文件权限管理**:检查和修改文件的读写权限,确保操作的安全性。 6. **流处理**:支持对大文件进行流式处理,避免一次性加载整个文件导致内存溢出。 7. **文件和目录的比较**:比较文件内容或目录结构,用于...
- **自定义会话配置**: Just允许开发者自定义URLSession配置,如证书、代理设置等。 - **会话共享**: 利用Swift的URLSession共享,可以确保多个请求间的会话一致性。 8. **中间件支持**: - Just提供了中间件...
解压后,你可以查看其内部结构,学习如何安装、配置和使用"just-kebab-case"库。通常,库的使用方法会在README文件中进行详细说明,包括npm安装指令、API接口介绍以及一些示例代码。 总之,"just-kebab-case" 是一...
java_实现足球计算器功能_JustTest.zip java_实现足球计算器功能_JustTest.zip java_实现足球计算器功能_JustTest.zip java_实现足球计算器功能_JustTest.zip java_实现足球计算器功能_JustTest.zip java_实现足球...
return Mono.just("Hello, WebFlux!"); } ``` 在这个例子中,`hello()`方法会返回一个单值`Mono`,当请求到达时,它将非阻塞地发送"Hello, WebFlux!"字符串。 **路由功能** WebFlux 使用`RouterFunction`和`...
Just a vue demo for study.....
【开源项目-pawelad-just-scored.zip】是一个由开发者 Pawel Adamcik 创建的开源项目,旨在为世界杯足球赛事的粉丝们提供一个基于 Lambda 的 Slack 应用程序。这个应用利用了 Amazon Web Services(AWS)的无服务器...
Android-Just-Another-Android-App.zip,一个android基础应用程序,包含大量的酷库/配置,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
在代码中,`swift-JustLog`可能提供了简洁的API,允许开发者轻松地在各个类和函数中插入日志语句,而无需关心具体的输出实现。例如,可能有类似`JustLog.info("这里是日志信息")`的语法,使得代码的可读性和维护性...
本项目“前端项目-just-animate.zip”提供了一个名为“just-animate”的Web动画库,专为前端开发者设计,旨在简化和增强网页的动态效果。 “just-animate”是一个专门针对Web动画的库,其主要目标是帮助开发者创建...
此外,KR^X可能还涵盖了其他内核保护措施,例如动态的内存管理和权限控制,以防止未授权的访问和操作。这样的解决方案可能会监控内核中的数据流,以检测异常行为并及时阻止潜在的攻击。通过这种方式,KR^X旨在创建一...
在"Android-just"库中,你可以找到一系列精心设计的工具类,涵盖了Android开发中的各种常见需求,如网络请求、数据序列化、日志打印、权限管理、线程控制等。这些工具类都是独立的,可以根据项目需求选择性地引入,...
此外,"justo-plugin-jhint"还支持与其他JUSTO插件集成,比如配合使用UglifyJS进行代码压缩,或者使用Babel进行ES6+语法转换,实现现代JavaScript的开发和旧浏览器的兼容。 总的来说,"前端开源库-justo-plugin-...
4. **内存管理**:C语言允许程序员直接管理内存,包括动态分配和释放内存。这涉及到了malloc()、calloc()、realloc()和free()函数的使用,理解它们的用途和潜在陷阱是防止内存泄漏的关键。 5. **预处理器**:预...
### C Programming - Just the FAQs #### 一、书籍概述与背景 《C Programming - Just the FAQs》是一本由多位作者合作完成的专业性书籍,其中包括了Paul S. R. Chisholm、David Hanley、Michael Jones、Michael ...
通过Justo,开发者可以构建模块化、可维护的前端项目,并享受到自动化任务管理、代码质量和性能优化等优势。Justo框架的设计理念是简化开发过程,提高开发效率,使得开发者能够更专注于业务逻辑的实现。 **ESLint...