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

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

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

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

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;
    }
    // 動態(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();
        }
    }
}

運行結(jié)果:

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

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

希望本文所述對大家java程序設計有所幫助。

相關文章

  • java的Guava工具包介紹

    java的Guava工具包介紹

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

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

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

    PowerJob的TransportServiceAware工作流程源碼解讀

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

    @NonNull導致無法序列化的問題及解決

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

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

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

    關于java編譯過程中的bug說明

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

    Spring中的之啟動過程obtainFreshBeanFactory詳解

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

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

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

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

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

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

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

最新評論

阜城县| 乌兰浩特市| 方城县| 潮州市| 芜湖市| 斗六市| 新平| 彭阳县| 卢湾区| 大宁县| 武穴市| 阜新| 日照市| 神农架林区| 乌鲁木齐市| 江阴市| 深圳市| 昭通市| 工布江达县| 遂平县| 双流县| 小金县| 敦煌市| 石家庄市| 九龙城区| 余庆县| 宣武区| 买车| 高台县| 吉水县| 兖州市| 钟祥市| 卢氏县| 乌兰察布市| 聊城市| 郑州市| 博乐市| 琼结县| 新安县| 固阳县| 神池县|