当前位置:  编程技术>java/j2ee

基于接口实现java动态代理示例

    来源: 互联网  发布时间:2014-11-05

    本文导语:  Subject.java 代码如下:package _20140416_; import java.util.List; public interface Subject {   public String say(String name,int age);   public List getAllList(String name);} RealSubject.java 代码如下:package _20140416_; import java.util.ArrayList;import java.util.List; public class R...

Subject.java

代码如下:

package _20140416_;

import java.util.List;

public interface Subject {
   public String say(String name,int age);
   public List getAllList(String name);
}

RealSubject.java

代码如下:

package _20140416_;

import java.util.ArrayList;
import java.util.List;

public class RealSubject implements Subject {

 private String name;

 public RealSubject(String name) {
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 @Override
 public String say(String name, int age) {
  return "名字:" + name + "_年龄:" + age;
 }

 @Override
 public List getAllList(String name) {
  List list = new ArrayList();
  list.add(new Person("A", 20));
  list.add(new Person("B", 20));
  list.add(new Person("C", 20));
  list.add(new Person("D", 20));
  System.out.println(name);
  return list;
 }

 @Override
 public int hashCode() {
  return 10010;
 }

 @Override
 public boolean equals(Object obj) {
  if(obj instanceof RealSubject){
   RealSubject real = (RealSubject)obj;
   System.out.println("getName():"+real.getName());
   System.out.println("this.name:"+this.name);
   if(real.getName()==this.name){
     System.out.println("相同");
   }else{
    System.out.println("不相同");
   }
  }
  return true;
 }
}

MyInvercationHander.java

代码如下:

package _20140416_;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class MyInvercationHander implements InvocationHandler{

 private Object obj;

 public Object bind(Object obj){
  this.obj=obj;
  return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
 }

 @Override
 public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable {
  Object temp = method.invoke(this.obj, args);
  //这里做切面操作 比如我要加功能
  System.out.println("方法之前!");
  return temp;
 }

}

Person.java

代码如下:

package _20140416_;

public class Person {
 private String name;
 private int age;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public Person(String name, int age) {
  super();
  this.name = name;
  this.age = age;
 }

}

MainTest.java

代码如下:

package _20140416_;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MainTest {
 public static void main(String[] args) {
      Subject subject = (Subject) new MyInvercationHander().bind(new RealSubject("中国"));
      System.out.println(subject.say("莫建锋",22));
      System.out.println(subject.getAllList("张三"));
      Map myMap = new HashMap();
      myMap.put("A",1);
      myMap.put("B",2);
      myMap.put("C",3);
      myMap.put("D",4);
      myMap.put("E",5);
      Set myEntrySet = myMap.entrySet();
      Iterator it = myEntrySet.iterator();
      while(it.hasNext()){
       Map.Entry entry = it.next();
       System.out.print(entry.getKey()+":");
       System.out.println(entry.getValue());

      }
      System.out.println(new RealSubject("中国").hashCode());
      System.out.println(new RealSubject("中国").equals(new RealSubject("中dd国")));
      String info = new String("1");
      String info1 = new String("1");
      System.out.println(new Integer('1'));
      System.out.println(info.hashCode());
      System.out.println(info1.hashCode());
      System.out.println(info==info1);
      System.out.println(info.equals(info1));
      short i = 1;
      System.out.println(i);
 }
}


    
 
 

您可能感兴趣的文章:

  • 通过spring用beanshell实现java接口示例
  • php利用新浪接口查询ip获取地理位置示例
  • php版淘宝网查询商品接口代码示例
  • c#基础之数组与接口使用示例(遍历数组 二维数组)
  • php调用google接口生成二维码示例
  • java网络编程之识别示例 获取主机网络接口列表
  • c#接口使用示例分享
  • php中创建和调用webservice接口示例
  • java实现小i机器人api接口调用示例
  • php快递单号查询接口使用示例
  • java自定义任务类定时执行任务示例 callable和future接口使用方法
  • C#通过接口与线程通信(捕获线程状态)示例代码
  • php使用百度天气接口示例
  • 微信公共账号之php开发接口示例
  • php接口和抽象类使用示例详解
  • 应用程序操作NorFlash示例代码分享(norflash接口使用方法)
  • java序列化实现Serializable接口
  • java的API中有没有既实现了Map接口又实现了List接口的类?
  • 菜鸟提问:一个类实现了一个接口,除了要定义接口的所有方法外,可不可以再添加其他方法?
  • interface 到底有什么用???实现接口,怎么实现??
  • javabeans必须实现serializable接口吗?
  • 实现接口时出错,分数大大的有
  • 使所有实现此接口(interface)的类拥有相同的构造器(contructor)?
  • 能用1个类实现1个以上的接口吗?
  • 用shell调用api接口能实现吗?100分就是你的了
  • 菜鸟问题:请大家用简单的代码描述一下,如何利用接口实现多重继承!
  • 怎样用接口(interface)实现多重继承?
  • 是不是applet不能实现事件监听器接口啊?
  • Collections.sort()方法,已经实现Comparable接口,为什么无法将Vector排序?
  • 有的书上说所有的BEAN类都必须实现javax.ejb.EJBObject接口,真的吗?
  • 弱智问题:我们怎么才知道要使用的方法需要实现什么接口才能使用这个方法呢?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.script接口invocable的类成员方法: getinterface定义及介绍
  • 关于LOCAL接口和REMOTE接口的同时兼顾的问题
  • java命名空间javax.lang.model.element接口typeelement的类成员方法: getinterfaces定义及介绍
  • 请问 linux 是如何调用 alsa的控制接口的??是通过控制接口名字吗?
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getmanagementspecversion定义及介绍
  • LINUX下最大支持虚接口数是多少? 如果我想配置1000个虚接口可以吗?
  • java命名空间java.beans.beancontext接口beancontextproxy的类成员方法: getbeancontextproxy定义及介绍
  • 对于操作系统的程序接口,作业接口,单内核,微内核到底有什么区别?
  • java命名空间javax.print接口uriexception的类成员方法: getreason定义及介绍
  • 急,请问如何修改网络接口eth为其它名称,如网络接口为abc0, abc1,要修改哪个配置文件?
  • java命名空间javax.swing.text接口caret的类成员方法: install定义及介绍
  • 有人在Linux下用过1394接口的设备吗?怎么装载一个1394接口的存储设备呢?
  • java命名空间javax.swing接口rootpanecontainer的类成员方法: getrootpane定义及介绍
  • 请问高手:EJB中的远程接口、本地接口、HOME接口的联系与区别是什么?应用时应注意哪些问题?
  • java命名空间javax.swing.text接口highlighter的类成员方法: install定义及介绍
  • C#学习笔记之接口与基于接口的工厂模型
  • java命名空间java.lang.reflect接口parameterizedtype的类成员方法: getrawtype定义及介绍
  • 请问为什麽在J2ee中客户端(测试时)用jndi定位enterprise bean的时候,可以把远程接口实例化?接口不是不可以生成对象的吗?
  • java命名空间javax.management接口descriptorread的类成员方法: getdescriptor定义及介绍
  • 关于Local接口和Remote接口!(请看过SUN的PetStore例子的朋友进来看看)!!!
  • java命名空间javax.lang.model.element接口typeparameterelement的类成员方法: getgenericelement定义及介绍
  • 【请教】java中接口问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3