最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 動(dòng)態(tài)生成類和實(shí)例, 并注入方法操作示例

 更新時(shí)間:2020年02月27日 12:26:50   作者:David_Ding  
這篇文章主要介紹了Java 動(dòng)態(tài)生成類和實(shí)例, 并注入方法操作,結(jié)合實(shí)例形式分析了Java 動(dòng)態(tài)生成類和實(shí)例以及動(dòng)態(tài)注入相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java 動(dòng)態(tài)生成類和實(shí)例, 并注入方法。分享給大家供大家參考,具體如下:

Java官方支持的, 必須要有接口才行

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
/**
 * @author David Ding
 *
 */
interface IJavaGen {
    int getRandomInt();
    void printClassInfo();
}
abstract class JavaGen implements IJavaGen {
    protected List<String> calledMethods = new LinkedList<>(); // property
    public int getRandomInt() { // Get a random integer
        return new Random().nextInt(10000);
    }
    public abstract void printClassInfo();
}
class JavaGenHandler implements InvocationHandler {
    private JavaGen mTarget;
    public JavaGenHandler(JavaGen javaGen) {
        mTarget = javaGen;
    }
    // 動(dòng)態(tài)注入
    @Override
    public Object invoke(Object obj, Method method, Object[] params) throws Throwable {
        Object ret = null;
        String name = method.getName();
        if (name.equals("getRandomInt")) { // intercept the getRandomInt
            ret = method.invoke(mTarget, params); // call the base method
            System.out.println("Print random int: " + ret);
        } else if (name.equals("printClassInfo")) { // print class info
            System.out.println("Class: " + obj.getClass());
            method.invoke(mTarget, params);
        }
        mTarget.calledMethods.add(name); // change the property
        return ret;
    }
}
public class JavaCodeGen {
    public static void main(String[] args) {
        try {
            Class<?> genClass = Proxy.getProxyClass(IJavaGen.class.getClassLoader(), IJavaGen.class);
            Constructor<?> cons = genClass.getConstructor(InvocationHandler.class);
            JavaGen target = new JavaGen() {
                @Override
                public void printClassInfo() {
                    System.out.println("I have to implement this method!!");
                }
            };
            IJavaGen javaGen = (IJavaGen) cons.newInstance(new JavaGenHandler(target));
            javaGen.getRandomInt();
            javaGen.printClassInfo();
            System.out.println(target.calledMethods);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

Print random int: 8143
Class: class demo.$Proxy0
I have to implement this method!!
[getRandomInt, printClassInfo]

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java的Guava工具包介紹

    java的Guava工具包介紹

    Java開發(fā)的同學(xué)應(yīng)該都使用或者聽說過Google提供的Guava工具包。日常使用最多的肯定是集合相關(guān)的工具類,還有Guava cache,除了這些之外Guava還提供了很多有用的功能,鑒于日常想用的時(shí)候找不到,這里就梳理一下Guava中那些好用的工具類,想優(yōu)化代碼的時(shí)候不妨過來看看
    2021-04-04
  • springboot搭建訪客管理系統(tǒng)的實(shí)現(xiàn)示例

    springboot搭建訪客管理系統(tǒng)的實(shí)現(xiàn)示例

    這篇文章主要介紹了springboot搭建訪客管理系統(tǒng)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • PowerJob的TransportServiceAware工作流程源碼解讀

    PowerJob的TransportServiceAware工作流程源碼解讀

    這篇文章主要介紹了PowerJob的TransportServiceAware工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • @NonNull導(dǎo)致無法序列化的問題及解決

    @NonNull導(dǎo)致無法序列化的問題及解決

    這篇文章主要介紹了@NonNull導(dǎo)致無法序列化的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java中MyBatis的動(dòng)態(tài)語句詳解

    Java中MyBatis的動(dòng)態(tài)語句詳解

    這篇文章主要介紹了Java中MyBatis的動(dòng)態(tài)語句詳解,動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一,通過不同參數(shù)生成不同的 SQL,可以動(dòng)態(tài)地對數(shù)據(jù)持久層進(jìn)行操作,而不需要每個(gè)數(shù)據(jù)訪問操作都要進(jìn)行手動(dòng)地拼接 SQL 語句,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于java編譯過程中的bug說明

    關(guān)于java編譯過程中的bug說明

    本篇文章是對java編譯過程中的bug進(jìn)行了詳細(xì)的說明介紹,需要的朋友參考下
    2013-05-05
  • Spring中的之啟動(dòng)過程obtainFreshBeanFactory詳解

    Spring中的之啟動(dòng)過程obtainFreshBeanFactory詳解

    這篇文章主要介紹了Spring中的之啟動(dòng)過程obtainFreshBeanFactory詳解,在refresh時(shí),prepareRefresh后,馬上就調(diào)用了obtainFreshBeanFactory創(chuàng)建beanFactory以及掃描bean信息(beanDefinition),并通過BeanDefinitionRegistry注冊到容器中,需要的朋友可以參考下
    2024-02-02
  • Java使用Zxing二維碼生成的簡單示例

    Java使用Zxing二維碼生成的簡單示例

    ZXing是一個(gè)開源的,用Java實(shí)現(xiàn)的多種格式的1D/2D條碼圖像處理庫,下面這篇文章主要給大家介紹了關(guān)于Java使用Zxing二維碼生成的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 微服務(wù)之間如何通過feign調(diào)用接口上傳文件

    微服務(wù)之間如何通過feign調(diào)用接口上傳文件

    這篇文章主要介紹了微服務(wù)之間如何通過feign調(diào)用接口上傳文件的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot開發(fā)實(shí)戰(zhàn)系列之定時(shí)器

    SpringBoot開發(fā)實(shí)戰(zhàn)系列之定時(shí)器

    定時(shí)任務(wù)我想諸位童鞋都不陌生,簡而言之名為“設(shè)定定時(shí)鬧鐘做某件事情”,下面這篇文章主要給大家介紹了關(guān)于SpringBoot定時(shí)器的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評論

读书| 江永县| 彭水| 淳安县| 图们市| 蒲城县| 本溪市| 休宁县| 安溪县| 化德县| 太和县| 云林县| 德庆县| 昂仁县| 固阳县| 河北省| 南宫市| 康定县| 云龙县| 桃江县| 米泉市| 呼玛县| 阿瓦提县| 醴陵市| 湾仔区| 扶余县| 大悟县| 山阳县| 晋宁县| 慈利县| 屏东市| 河南省| 慈溪市| 永善县| 罗源县| 七台河市| 佛冈县| 沅江市| 富阳市| 万安县| 宽城|