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

 更新时间:2014年04月22日 09:30:28   作者:  
这篇文章主要介绍了基于接口实现java动态代理示例,需要的朋友可以参考下

Subject.java

复制代码 代码如下:

package _20140416_;

import java.util.List;

public interface Subject {
   public String say(String name,int age);
   public List<Person> 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<Person> getAllList(String name) {
  List<Person> list = new ArrayList<Person>();
  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<String,Integer> myMap = new HashMap<String, Integer>();
      myMap.put("A",1);
      myMap.put("B",2);
      myMap.put("C",3);
      myMap.put("D",4);
      myMap.put("E",5);
      Set<Map.Entry<String,Integer>> myEntrySet = myMap.entrySet();
      Iterator<Map.Entry<String,Integer>> it = myEntrySet.iterator();
      while(it.hasNext()){
       Map.Entry<String,Integer> 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 JPA事务管理与自定义操作实例解析(最新推荐)

    Spring JPA事务管理与自定义操作实例解析(最新推荐)

    在Spring框架中,数据持久化操作常常与事务管理紧密相关,本文将深入探讨Spring Data JPA中的事务管理机制,并结合具体实例,展示如何自定义事务行为以满足不同的业务需求,感兴趣的朋友一起看看吧
    2024-12-12
  • SpringBoot2.7 WebSecurityConfigurerAdapter类过期配置

    SpringBoot2.7 WebSecurityConfigurerAdapter类过期配置

    这篇文章主要为大家介绍了SpringBoot2.7中WebSecurityConfigurerAdapter类过期应该如何配置,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java内存溢出的几个区域总结(注意避坑!)

    Java内存溢出的几个区域总结(注意避坑!)

    内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存,下面这篇文章主要给大家介绍了关于Java内存溢出的几个区域,总结出来给大家提醒注意避坑,需要的朋友可以参考下
    2022-11-11
  • Java模仿微信实现零钱通简易功能(两种版本)

    Java模仿微信实现零钱通简易功能(两种版本)

    本文主要介绍了使用Java开发零钱通项目, 模仿微信实现简易功能,可以完成收益入账,消费,查看明细,退出系统等功能。文中一共介绍了两种实现方法,快来学习吧
    2021-12-12
  • Java实现优雅日期处理的方案详解

    Java实现优雅日期处理的方案详解

    在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • springboot解决XSS存储型漏洞问题

    springboot解决XSS存储型漏洞问题

    这篇文章主要介绍了springboot解决XSS存储型漏洞问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java(若依)如何读取Yml配置文件

    Java(若依)如何读取Yml配置文件

    文章介绍了如何在Java若依框架中读取Yml配置文件,包括定义配置字段、编写读取工具类以及注意事项,最后总结了个人经验
    2025-02-02
  • java分布式面试CAP分别代表含义分析

    java分布式面试CAP分别代表含义分析

    这篇文章主要为大家介绍了java分布式面试中关于CAP分别代表含义的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • SpringBoot使用JdbcTemplate访问操作数据库基本用法

    SpringBoot使用JdbcTemplate访问操作数据库基本用法

    这篇文章主要介绍了SpringBoot使用JdbcTemplate访问操作数据库基本用法,Spring对数据库的操作在jdbc上s面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。下文详细内容需要的小伙伴可以参考一下
    2022-02-02
  • 详解Java中CAS机制的原理与优缺点

    详解Java中CAS机制的原理与优缺点

    CAS 英文就是 compare and swap ,也就是比较并交换,这篇文章主要来和大家介绍一下Java中CAS机制的原理与优缺点,感兴趣的小伙伴可以了解一下
    2023-06-06

最新评论