日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Java—动态代理

發(fā)布時(shí)間:2023/11/29 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java—动态代理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

動(dòng)態(tài)代理利用了JDK API,動(dòng)態(tài)地在內(nèi)存中構(gòu)建代理對(duì)象,從而實(shí)現(xiàn)對(duì)目標(biāo)對(duì)象的代理功能。動(dòng)態(tài)代理又被稱為JDK代理或接口代理。

靜態(tài)代理與動(dòng)態(tài)代理的區(qū)別主要在:

  • 靜態(tài)代理在編譯時(shí)就已經(jīng)實(shí)現(xiàn),編譯完成后代理類是一個(gè)實(shí)際的class文件
  • 動(dòng)態(tài)代理是在運(yùn)行時(shí)動(dòng)態(tài)生成的,即編譯完成后沒有實(shí)際的class文件,而是在運(yùn)行時(shí)動(dòng)態(tài)生成類字節(jié)碼,并加載到JVM中

特點(diǎn):

動(dòng)態(tài)代理對(duì)象不需要實(shí)現(xiàn)接口,但是要求目標(biāo)對(duì)象必須實(shí)現(xiàn)接口,否則不能使用動(dòng)態(tài)代理。

源代碼

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class EatProxy {private Object entity;public EatProxy(Object entity) {this.entity = entity;}public Object get() {return Proxy.newProxyInstance(entity.getClass().getClassLoader(), entity.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("The restaurant:Making meals for guests");Object returnValue=method.invoke(entity,args);return returnValue;}});} }public class EatReal implements IEat {@Overridepublic void get() {System.out.println("The guests:I got my meal, I can eat");} }public interface IEat {public void get(); }public class JavaDemo {public static void main(String[] args) {IEat iEat=new EatReal();IEat eatProxy=(IEat)new EatProxy(iEat).get();eatProxy.get();} }

總結(jié)

以上是生活随笔為你收集整理的Java—动态代理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。