代理的方法是有两种
一种是静态的代理方法
还有一种是动态的代理方法
首先研究的是静态的代理的方法 它主要体现的是代理模式的思想
首先是定义一个实现业务的接口
public interface UserManager {
public void setUserName();
public void setUserPassword();
public void setAddress();
}
然后是定义一个类去实现这些接口
public class UserManagerImpl implements UserManager {
@Override
public void setAddress() {
System.out.println("-----setAddress Successfully!-------");
}
@Override
public void setUserName() {
System.out.println("-----setUserName Successfully!-------");
}
@Override
public void setUserPassword() {
System.out.println("-----setUserPassword Successfully!-------");
}
}
然后是一个代理的实现类 既然是代理类当然是要也实现这些业务否者就不能实现代理功能了
public class UserManagerProxy implements UserManager {
private UserManager manager;
public UserMnaagerProxy(UserManager manager){
this.manager = manager
}
@Override
public void setAddress() {
check();
manager.setAddress();
}
@Override
public void setUserName() {
check();
this.manager.setUserName();
}
@Override
public void setUserPassword() {
check();
this.manager.setUserPassword();
}
public void check(){
System.out.println("-----check Successfully!-------");
}
}
客户端的代码就是
import org.util.Impl.UserManagerImpl;
import org.util.interfaces.UserManager;
public class UserManagerClient {
public static void main(String[] args) {
UserManager proxy = new UserManagerProxy(new UserManagerImpl());
proxy.setAddress();
proxy.setUserPassword();
proxy.setUserName();
}
}
这就是静态代理方法了 他不适合适用于大的代码量就是说很多的业务方法都必须的进行check();这就比较麻烦了 但是java 的包里给我们实现了一个动态的实现代理的模式体现了aop的思想
首先是他的接口的代码是 实现接口的业务类相同的就不写了都是相同的 就不再写代码了
就在上面
然后就是他的一个包含在动态代理类里的一个实现 (调用处理程序 接口)的实现类并且我们可以将这个代理类的实例化在这个类中完成 其实这都是一步一步的走的
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserManagerInvoke implements InvocationHandler {
public Object targetObj ;
public Object newProxy(Object targetObj){
this.targetObj = targetObj;
/**
* 创建一个目标类的Proxy实例
* 并且将一个实现InvocationHandler类的实例的参数
* 传进对这个Proxy对象将成员进行初始化
* 从下面的例子中可以看出这个类主要的思想就是AOP思想
* 就是为第三个参数(实现InvocationHandler类的实例的参数)
* 是最重要的 这个参数类的实例会实现在invoke()中整个的方法
* 约定的是当你在使用这个代理类的时候会自东进行jinvoke()的方法
*/
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),
targetObj.getClass().getInterfaces(),
this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
checkSecurity();
Object result = null;
try{
result = method.invoke(this.targetObj, args);
}catch(Exception e ){
e.printStackTrace();
}
return result;
}
public void checkSecurity(){
System.out.println("-------checkSecurity Successfully!!!--------");
}
}
关于java.lang.reflect.Proxy 的介绍你可以看看jdk的api文档这里不再细说了
然后是client的代码
import org.util.Impl.UserManagerImpl;
import org.util.aop.UserManagerInvoke;
import org.util.interfaces.UserManager;
public class UserManagerClient {
public static void main(String[] args) {
UserManagerInvoke hander = new UserManagerInvoke();
UserManager proxy = (UserManager) hander.newProxy(new UserManagerImpl());
//由proxy的实现机制可以看出 这个代理类每一次调用代理的方法就会自动转到
//实现InvocationHandler接口的类中的invoke();方法中运行
proxy.setAddress();
proxy.setUserPassword();
proxy.setUserName();
}
}
运行的结果就是
-------checkSecurity Successfully!!!--------
-----setAddress Successfully!-------
-------checkSecurity Successfully!!!--------
-----setUserPassword Successfully!-------
-------checkSecurity Successfully!!!--------
-----setUserName Successfully!-------
相比较而言第二种方式就有更灵活的代理机制了 也体现了aop的切面的思想
分享到:
相关推荐
代理模式的小demo
C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。
Java 设计模式 代理模式介绍,含源码
本程序是一个代理模式的小例子。程序比较简单。
JAVA设计模式之代理模式实例
设计模式的代理模式的例子,希望对大家有用~~~~~~~~
自己写的一个代理模式的示例,供大家参考 自己写的一个代理模式的示例,供大家参考 自己写的一个代理模式的示例,供大家参考
Java代理模式 事例很生动,非常容易理解,推荐给大家。
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。 代理模式的主要作用是,用来控制真实对象的访问权限,也就是完全对外隐藏真实对象。以及在调用真实对象时,代理还可以额外的处理另外的事。 比如下面...
该代码是android应用设计模式之代理模式小例子
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
用java实现代理模式,使用房屋中介的现实例子进行代理模式的说明
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
Proxy代理模式的经典实例(很有面向对象思想哦)。快速学会Proxy代理模式.
用生动的例子讲述设计模式 潘金莲 三国演义 。。。。。。
这份文件讲诉了代理模式-分布式计算,是以例子的形式进行讲诉的,希望可以帮助学习的人!
一个众所周知的代理模式的例子就是引用计数的指针对象。 代理模式是结构设计模式的例子。这个模式的目的是要创建一个真实对象或类的代理。 代理模式有3个必要的元素: 1. 真实的对象(执行业务逻辑,被代理的对象) ...
- 代理模式 - 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事...
java的23种设计模式之代理模式, 详细的代码例子。
用C#实现的代理模式的小例子,学习代理模式的练习,更加了解这个模式