静态代理模式与工厂设计和Anotation的应用
书接上回
package com.alibaba; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface Imessage{ void send(String chanel); } class Imessagempl implements Imessage{ @Override public void send(String chanel) { System.out.println(chanel+"消息发送"); } } class proxysendmsg implements InvocationHandler{ public Object target; //保存实际业务对象 public Object bind(Object target){ this.target=target; return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this); } public boolean connected(){ System.out.println("代理对象进行链接,已完成链接初始化"); return true; } public void close(){ System.out.println("代理正在关闭链接"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("执行的方法是"+method); Object obj=null; if(this.connected()){ obj=method.invoke(target,args); this.close(); }else { System.out.println("无法进行链接"); } return obj; } } class test{ public static void main(String[] args) { try { Imessage imessage = (Imessage) new proxysendmsg().bind(Imessagempl.class.newInstance()); imessage.send("网络"); } catch (Exception e) { e.printStackTrace(); } } }

实现工厂类的封装
package com.alibaba; import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface Imessage{ void send(String chanel); } class Imessagempl implements Imessage{ @Override public void send(String chanel) { System.out.println(chanel+"消息发送"); } } class proxysendmsg implements InvocationHandler{ public Object target; //保存实际业务对象 public Object bind(Object target){ this.target=target; return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this); } public boolean connected(){ System.out.println("代理对象进行链接,已完成链接初始化"); return true; } public void close(){ System.out.println("代理正在关闭链接"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("执行的方法是"+method); Object obj=null; if(this.connected()){ obj=method.invoke(target,args); this.close(); }else { System.out.println("无法进行链接"); } return obj; } } class Factory{ private Factory(){}; public static <T> T getInstance(Class<T> clazz){ try { return (T) new proxysendmsg().bind(clazz.newInstance()); } catch (Exception e) { e.printStackTrace(); return null; } } } class MessageService{ private Imessage imessage; public MessageService(){ this.imessage=Factory.getInstance(Imessagempl.class); } public void send(String msg){ this.imessage.send(msg); } } class test{ public static void main(String[] args) { MessageService messageService = new MessageService(); messageService.send("net"); } }

引入Anotation
package com.alibaba; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface Imessage{ void send(String chanel); } class Imessagempl implements Imessage{ @Override public void send(String chanel) { System.out.println(chanel+"消息发送"); } } class NETsagempl implements Imessage{ @Override public void send(String chanel) { System.out.println(chanel+"NETsagempl消息发送"); } } class proxysendmsg implements InvocationHandler{ public Object target; //保存实际业务对象 public Object bind(Object target){ this.target=target; return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this); } public boolean connected(){ System.out.println("代理对象进行链接,已完成链接初始化"); return true; } public void close(){ System.out.println("代理正在关闭链接"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("执行的方法是"+method); Object obj=null; if(this.connected()){ obj=method.invoke(target,args); this.close(); }else { System.out.println("无法进行链接"); } return obj; } } class Factory{ private Factory(){}; public static <T> T getInstance(Class<T> clazz){ try { return (T) new proxysendmsg().bind(clazz.newInstance()); } catch (Exception e) { e.printStackTrace(); return null; } } } @Retention(RetentionPolicy.RUNTIME) @interface UseMessage{ public Class<?> clazz(); } @UseMessage(clazz = NETsagempl.class) class MessageService{ private Imessage imessage; public MessageService(){ UseMessage useMessage =MessageService.class.getAnnotation(UseMessage.class); this.imessage=(Imessage) Factory.getInstance(useMessage.clazz()); } public void send(String msg){ this.imessage.send(msg); } } class test{ public static void main(String[] args) { MessageService messageService = new MessageService(); messageService.send(""); } }

    jiapengchu
posted on 2022-03-29 16:45 jiapengchu 阅读(26) 评论(0) 收藏 举报
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号