静态代理 静态代理很好理解,代码类似如下: 原类: package staticProxy;public class Object { public void service() { //...do something }} 代理类: package staticProxy;public class ProxyObject { private staticProxy.Object ...obj; public ProxyObject(staticProxy.Object obj) { this.obj = obj; } public void service()
->公共接口 代码实现 第一步:创建公共接口 public interface StaticProxy { //具体要做的事情 void dosomething(); } 第二步:创建目标对象...public class StaticProxyTarget implements StaticProxy { @Override public void dosomething()...{ //代理对象需要持有目标对象 private StaticProxy staticProxy; //通过构造器的方式传入目标对象 public StaticProxyImpl...(StaticProxy staticProxy) { this.staticProxy = staticProxy; } @Override public void...staticProxy = new StaticProxyImpl(target); staticProxy.dosomething(); } } 结果如下: --------
System.out.println("end time:"+System.currentTimeMillis()); } 但是这样就不能实现不修改代码就处理问题的初衷了,这个时候就可以使用静态代理来解决 public class StaticProxy...implements MainService { private MainService mainService; public StaticProxy(MainService mainService...void main (String args[]){ MainService mainService=new MainServiceImpl(); MainService staticProxy...=new StaticProxy(mainService); staticProxy.doSomeThing(); } 动态代理 上方使用静态代理虽然解决了不修改代码的需求,但是如果原对象有多个方法的话就必须全部实现且加上打印的逻辑
完整代码如下: public class StaticProxy implements IHello { private IHello iHello; public void setImpl...static public void main(String[] arg) { Helloimplements hello = new Helloimplements(); StaticProxy...proxy = new StaticProxy(); proxy.setImpl(hello); proxy.sayHello("Jerry"); } } 这种做法能够实现需求...args); } catch (Exception e) { e.printStackTrace(); } return result; } 上面代码里的bind方法很想我之前代理类StaticProxy...有的朋友可能会问,你这个InvocationHandler看起来比静态代理StaticProxy还复杂啊?有什么好处? 假设老板的需求又变了,在调用问候和说再见的方法里,要使用不同的日志记录策略。
完整代码如下: public class StaticProxy implements IHello { private IHello iHello; public void setImpl...static public void main(String[] arg) { Helloimplements hello = new Helloimplements(); StaticProxy...proxy = new StaticProxy(); proxy.setImpl(hello); proxy.sayHello("Jerry"); } } 这种做法能够实现需求...IHello ihello = (IHello) helloproxy.bind(hello); ihello.sayHello("Jerry"); } } 执行效果和StaticProxy...有的朋友可能会问,你这个InvocationHandler看起来比静态代理StaticProxy还复杂啊?有什么好处? 假设老板的需求又变了,在调用问候和说再见的方法里,要使用不同的日志记录策略。
static void testStaticProxy() { User user = new User(); user.setName("tom"); new StaticProxy...(new UserInterfaceImpl()).saveUser(user); } static class StaticProxy implements UserInterface...{ private UserInterface userInterface; public StaticProxy(UserInterface userInterface
Exception { String src = "package dynamicproxy;\n\n" + "public class StaticProxy..."{\n" + "\tHelloWorld helloWorld;\n\n" + "\tpublic StaticProxy...> c = ul.loadClass("dynamicproxy.StaticProxy"); Constructor<?...constructor.newInstance(helloWorldImpl); File classFile = new File(fileDir + "\\src\\com\\xrq\\proxy\\StaticProxy.class
; /** * 静态代理类(中介、代理类) * 注意:需要被代理类实现相同的接口 */ public class StaticProxy implements RentalHouse {...; } } 测试类 package cn.arebirth.staticproxy; public class Test { public static void main(String...proxy = new StaticProxy(host); proxy.rent(); } } 输出结果: 我是中介,收你500推荐费 我是房东,...被代理类 package cn.arebirth.staticproxy; /** * 房东1(目标类、被代理类) */ public class Host1 implements RentalHouse...; /** * 静态代理类(中介、代理类) * 注意:需要被代理类实现相同的接口 */ public class StaticProxy implements RentalHouse{
System.out.println("--------------------delete---------------"); } } 1.3 代理类 /** * 代理类 */ public class StaticProxy...implements UserService { UserService userService; public StaticProxy(UserServiceImpl userService...public class StaticTest { @Test public void test1(){ UserService userService=new StaticProxy
4.1、静态代理 静态代理直接将目标对象targeti通过构造方法传递进去,构建出来了代理对象staticProxy。...; return "HelloServiceImpl: " + msg; } } /** * 代理类 */ public class StaticProxy implements...HelloService { /** * 目标对象 */ private HelloService target; public StaticProxy...HelloService helloService = new HelloServiceImpl(); // 1、静态代理 HelloService staticProxy...= new StaticProxy(helloService); String result = staticProxy.sayHello("静态代理"); System.out.println
实现同一个接口 代理对象拦截被代理对象的访问,可以修改访问的参数 返回值 甚至拦截访问 二、代码 1、启动类 public class StaticProxy { public static void...; } private void after() { System.out.println("婚后收拾"); } } 三、完整代码 public class StaticProxy
静态代理---硬编码 没啥好说的,就是像装饰模式一样 public class StaticProxy extends Object{ Object object; public StaticProxy...return hashCode; } public static void main(String[] args) { Object proxy = new StaticProxy
static void main(String[] args) { TargetImpl target = new TargetImpl(); StaticProxyImpl staticProxy...= new StaticProxyImpl(target); staticProxy.print(); } } 第四部 运行代理类 Connected to the target
void method() { System.out.println("target method"); }} /** * 静态代理类 */public class StaticProxy...implements Sourceable{ private Sourceable sourceable; public StaticProxy(Sourceable sourceable) { this.sourceable...public static void main(String[] args) { Sourceable sourceable = new Source(); Sourceable proxy = new StaticProxy
package com.dmz.proxy; import com.dmz.proxy.target.MyService; /** * 静态代理 */ public class StaticProxy...implements MyService { private MyService target; public StaticProxy(MyService target) { this.target
,首先我们想通过代码创建一个java类,它长这样 package proxy; import java.lang.Override; import java.lang.System; import staticProxy.Servlet...animateProxy; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import staticProxy.Servlet...animateProxy.InvocationHandler; import java.lang.Override; import java.lang.reflect.Method; import staticProxy.Servlet...this.handler = handler; } @Override public void uploadFile() { try { Method method = staticProxy.Servlet.class.getMethod....addCode("try {\n") //Method method = staticProxy.Servlet.class.getMethod
真实主题角色 代码示例 这里我们使用一个玩游戏的例子来进行分析,对于玩游戏的人来说,玩累了,需要一些代理的人帮助自己杀Boss,这里我们有3个类: 游戏接口 package cn.edu.hust.proxy.staticProxy...login(String name,String passwd); void killBoss(); void upgade(); } package cn.edu.hust.proxy.staticProxy...; } } 代打人员: package cn.edu.hust.proxy.staticProxy; public class GameProxy implements GameTask{
静态代理 -- 图示 -- 代码示例 抽象接口(Subject.java): package com.mingmingcome.designpattern.proxy.staticproxy; /*...interface Subject { void request(); } 代理类(Proxy.java): package com.mingmingcome.designpattern.proxy.staticproxy...; } } 真实主题类(RealSubject): package com.mingmingcome.designpattern.proxy.staticproxy; /** * @ClassName...System.out.println("真实的请求"); } } 测试类(TestStaticProxy.java): package com.mingmingcome.designpattern.proxy.staticproxy
* @brief */ public class StaticProxy implements ServiceInterface { private final MyService myService...; private final ThreadLocal> context; public StaticProxy(MyService myService, ThreadLocal...System.currentTimeMillis()); return this.myService.getSomeThing1(name); } } 此时客户端就不用持有MyService的实例了, 持有StaticProxy...public static void main(String[] args) { ServiceInterface server = new MyService(); StaticProxy...proxy = new StaticProxy(server, new ThreadLocal>()); proxy.doSomething1();
e.printStackTrace(); } } //生成的字节码: importcn.com.goser.proxy.imooc.staticproxy.Moveable...Class[] { Class.forName("java.lang.Object") }); m3 = Class.forName("cn.com.goser.proxy.imooc.staticproxy.Moveable..."packagecn.com.goser.proxy.jdk.simulate;"+ RT + "importcn.com.goser.proxy.imooc.staticproxy.Admin...;" + RT + "importcn.com.goser.proxy.imooc.staticproxy.Manager;" + RT + "//以聚合方式实现的代理主题
领取专属 10元无门槛券
手把手带您无忧上云