基于接口實(shí)現(xiàn)java動態(tài)代理示例
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);
}
}
相關(guān)文章
Spring JPA事務(wù)管理與自定義操作實(shí)例解析(最新推薦)
在Spring框架中,數(shù)據(jù)持久化操作常常與事務(wù)管理緊密相關(guān),本文將深入探討Spring Data JPA中的事務(wù)管理機(jī)制,并結(jié)合具體實(shí)例,展示如何自定義事務(wù)行為以滿足不同的業(yè)務(wù)需求,感興趣的朋友一起看看吧2024-12-12
SpringBoot2.7?WebSecurityConfigurerAdapter類過期配置
這篇文章主要為大家介紹了SpringBoot2.7中WebSecurityConfigurerAdapter類過期應(yīng)該如何配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Java內(nèi)存溢出的幾個(gè)區(qū)域總結(jié)(注意避坑!)
內(nèi)存溢出是指應(yīng)用系統(tǒng)中存在無法回收的內(nèi)存或使用的內(nèi)存過多,最終使得程序運(yùn)行要用到的內(nèi)存大于虛擬機(jī)能提供的最大內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于Java內(nèi)存溢出的幾個(gè)區(qū)域,總結(jié)出來給大家提醒注意避坑,需要的朋友可以參考下2022-11-11
Java模仿微信實(shí)現(xiàn)零錢通簡易功能(兩種版本)
本文主要介紹了使用Java開發(fā)零錢通項(xiàng)目, 模仿微信實(shí)現(xiàn)簡易功能,可以完成收益入賬,消費(fèi),查看明細(xì),退出系統(tǒng)等功能。文中一共介紹了兩種實(shí)現(xiàn)方法,快來學(xué)習(xí)吧2021-12-12
Java實(shí)現(xiàn)優(yōu)雅日期處理的方案詳解
在我們的日常工作中,需要經(jīng)常處理各種格式,各種類似的的日期或者時(shí)間,下面我們就來看看如何使用java處理這樣的日期問題吧,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法
這篇文章主要介紹了SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法,Spring對數(shù)據(jù)庫的操作在jdbc上s面做了深層次的封裝,使用spring的注入功能,可以把DataSource注冊到JdbcTemplate之中。下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-02-02
詳解Java中CAS機(jī)制的原理與優(yōu)缺點(diǎn)
CAS?英文就是?compare?and?swap?,也就是比較并交換,這篇文章主要來和大家介紹一下Java中CAS機(jī)制的原理與優(yōu)缺點(diǎn),感興趣的小伙伴可以了解一下2023-06-06

