欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Guava反射工具使用示例詳解

 更新時(shí)間:2023年12月12日 11:52:43   作者:S  
這篇文章主要為大家介紹了Guava反射工具使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

大家好,我是小黑,今天咱們聊聊Java反射,特別是在Guava這個(gè)強(qiáng)大的庫(kù)中,它是怎么讓反射變得更簡(jiǎn)單,更有趣的。咱們都知道,反射在Java中是個(gè)相當(dāng)強(qiáng)大的特性,它允許程序在運(yùn)行時(shí)訪問(wèn)和修改類的行為。但是,如果你用過(guò)Java的原生反射API,可能會(huì)覺得有點(diǎn)復(fù)雜,甚至有點(diǎn)繁瑣,對(duì)吧?

這時(shí)候,Guava的反射工具就派上用場(chǎng)了。Guava不僅提供了一套功能更全面的反射API,而且使用起來(lái)更加直觀和簡(jiǎn)潔。所以,如果你想在Java項(xiàng)目中更高效地使用反射,Guava絕對(duì)是個(gè)不錯(cuò)的選擇。

Guava反射工具簡(jiǎn)介

在深入Guava的反射工具之前,咱們先來(lái)簡(jiǎn)單介紹一下它的基礎(chǔ)。Guava的反射庫(kù)主要是對(duì)Java原生反射API的增強(qiáng)和優(yōu)化。相比Java的原生反射API,Guava提供的工具更加易于使用,錯(cuò)誤信息也更加友好。

首先,Guava的反射工具最吸引人的地方在于它的TypeToken類。這個(gè)類解決了Java中的類型擦除問(wèn)題,使得在運(yùn)行時(shí)能夠安全地操作泛型。舉個(gè)例子,假設(shè)咱們有個(gè)泛型類List<String>,在Java原生反射中,你無(wú)法直接知道這個(gè)List的泛型是String。但是在Guava中,你可以這么做:

TypeToken<List<String>> typeToken = new TypeToken<List<String>>() {};
Type type = typeToken.getType();
System.out.println(type); // 輸出java.util.List<java.lang.String>

看到?jīng)],TypeToken真是太方便了,它幫咱們保留了泛型信息。這對(duì)于編寫類型安全的泛型代碼來(lái)說(shuō),簡(jiǎn)直是救星。

接下來(lái),咱們聊聊Guava的動(dòng)態(tài)代理。在Java原生的反射API中,創(chuàng)建和管理動(dòng)態(tài)代理可能讓人頭疼。但在Guava中,這變得簡(jiǎn)單多了。Guava提供了Reflection類,它允許你輕松創(chuàng)建動(dòng)態(tài)代理,并提供了一種更簡(jiǎn)潔的方式來(lái)處理代理實(shí)例。例如,咱們可以這樣創(chuàng)建一個(gè)簡(jiǎn)單的代理:

InvocationHandler handler = new InvocationHandler() {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("方法名:" + method.getName());
        return null;
    }
};
List proxyInstance = Reflection.newProxy(List.class, handler);
proxyInstance.add("測(cè)試"); // 調(diào)用add方法時(shí),會(huì)觸發(fā)InvocationHandler

在這個(gè)例子中,咱們創(chuàng)建了一個(gè)List接口的動(dòng)態(tài)代理,并且定義了一個(gè)InvocationHandler,在調(diào)用任何方法時(shí)都會(huì)打印方法名。這只是Guava動(dòng)態(tài)代理的冰山一角,但已經(jīng)可以看出它的強(qiáng)大和靈活性。

總的來(lái)說(shuō),Guava的反射工具讓Java的反射變得更加易用和強(qiáng)大。無(wú)論是處理泛型還是動(dòng)態(tài)代理,Guava都提供了更簡(jiǎn)潔、更直觀的解決方案。

深入Guava反射API

嗨,大家好,我是小黑。今天咱們繼續(xù)深挖Guava的反射工具箱,來(lái)看看如何在實(shí)戰(zhàn)中靈活運(yùn)用它們。咱們這章重點(diǎn)看幾個(gè)關(guān)鍵的功能:TypeToken、動(dòng)態(tài)代理,以及方法調(diào)用和參數(shù)處理。

類TypeToken的使用

首先,咱們來(lái)聊聊TypeToken。在Java的世界里,泛型類型在編譯時(shí)被擦除,這就意味著運(yùn)行時(shí)你很難獲取到具體的泛型類型信息。但Guava的TypeToken巧妙地解決了這個(gè)問(wèn)題。舉個(gè)栗子:

// 創(chuàng)建一個(gè)TypeToken實(shí)例,表示List<String>類型
TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
// 使用TypeToken獲取具體的類型信息
Type type = stringListTok.getType();
System.out.println("類型信息: " + type); // 輸出: java.util.List<java.lang.String>

看到?jīng)],通過(guò)TypeToken,咱們輕松地獲取了完整的泛型信息。這在處理泛型集合或者自定義泛型類時(shí)特別有用,比如在實(shí)現(xiàn)泛型序列化和反序列化的時(shí)候。

動(dòng)態(tài)代理與Reflection API

接下來(lái),聊聊動(dòng)態(tài)代理。在Java中創(chuàng)建代理類通常需要寫很多樣板代碼,但Guava的Reflection類讓這一切變得簡(jiǎn)單。比如說(shuō),咱們要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的代理實(shí)例,來(lái)攔截方法調(diào)用:

// 創(chuàng)建一個(gè)InvocationHandler,用于定義方法調(diào)用的行為
InvocationHandler handler = new InvocationHandler() {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("調(diào)用方法: " + method.getName());
        return 42; // 假設(shè)所有方法返回的都是42
    }
};
// 使用Guava的Reflection創(chuàng)建List的代理實(shí)例
List<Integer> proxyList = Reflection.newProxy(List.class, handler);
// 調(diào)用代理實(shí)例的方法
proxyList.add(1); // 控制臺(tái)會(huì)輸出: 調(diào)用方法: add

在這個(gè)例子中,咱們創(chuàng)建了一個(gè)List的代理實(shí)例,所有對(duì)其方法的調(diào)用都會(huì)被我們的InvocationHandler捕獲和處理。這種方式在實(shí)現(xiàn)某些設(shè)計(jì)模式,比如裝飾器模式時(shí)特別有用。

方法調(diào)用與參數(shù)處理

最后,咱們來(lái)看看Guava是怎么簡(jiǎn)化方法調(diào)用和參數(shù)處理的。在Java的原生反射API中,調(diào)用方法時(shí)需要處理很多繁瑣的異常和類型轉(zhuǎn)換。但在Guava中,這變得簡(jiǎn)單多了。比如說(shuō),咱們有這樣一個(gè)方法:

public class MyUtils {
    public static String transformString(String input) {
        return "Processed: " + input;
    }
}

咱們想通過(guò)反射來(lái)調(diào)用這個(gè)方法。在Guava中,這可以簡(jiǎn)化為:

// 獲取方法引用
Method transformMethod = MyUtils.class.getMethod("transformString", String.class);
// 使用Guava的Invokable來(lái)簡(jiǎn)化調(diào)用
Invokable<MyUtils, String> invokable = new Invokable<MyUtils, String>(transformMethod) {};
String result = invokable.invoke(null, "Hello World");
System.out.println(result); // 輸出: Processed: Hello World

看,使用Guava的Invokable,咱們輕松實(shí)現(xiàn)了對(duì)方法的調(diào)用,無(wú)需擔(dān)心復(fù)雜的異常處理和類型轉(zhuǎn)換。

Guava反射工具的實(shí)際應(yīng)用案例

本章,咱們來(lái)聊聊Guava反射工具在實(shí)際應(yīng)用中的一些案例。咱們知道理論總是枯燥的,所以今天咱們通過(guò)一些實(shí)際的例子來(lái)看看Guava反射工具是如何在實(shí)際項(xiàng)目中大放異彩的。

案例1:類型安全的數(shù)據(jù)轉(zhuǎn)換

在處理數(shù)據(jù)轉(zhuǎn)換時(shí),尤其是涉及泛型的情況下,保持類型安全是個(gè)挑戰(zhàn)。但有了Guava的TypeToken,這就變得簡(jiǎn)單多了。比如說(shuō),咱們有一個(gè)通用的數(shù)據(jù)轉(zhuǎn)換器,它可以將任意類型的數(shù)據(jù)轉(zhuǎn)換為另一種類型:

public class DataConverter {
    private Map<Type, Function<Object, ?>> converterMap = new HashMap<>();
    // 注冊(cè)轉(zhuǎn)換器
    public <T> void registerConverter(TypeToken<T> typeToken, Function<Object, T> converter) {
        converterMap.put(typeToken.getType(), converter);
    }
    // 執(zhí)行轉(zhuǎn)換
    public <T> T convert(Object input, TypeToken<T> targetTypeToken) {
        Function<Object, ?> converter = converterMap.get(targetTypeToken.getType());
        if (converter != null) {
            return targetTypeToken.getRawType().cast(converter.apply(input));
        }
        throw new IllegalArgumentException("未找到合適的轉(zhuǎn)換器");
    }
}

在這個(gè)例子中,咱們利用TypeToken確保了轉(zhuǎn)換器的注冊(cè)和查詢都是類型安全的。這樣,即使在復(fù)雜的泛型環(huán)境下,咱們也可以放心地進(jìn)行數(shù)據(jù)轉(zhuǎn)換。

案例2:動(dòng)態(tài)生成日志代理

在一些項(xiàng)目中,可能需要對(duì)方法調(diào)用進(jìn)行日志記錄。通常,這需要編寫大量的樣板代碼。但使用Guava的動(dòng)態(tài)代理,這變得簡(jiǎn)單而優(yōu)雅。比如說(shuō),咱們可以創(chuàng)建一個(gè)日志代理,它會(huì)自動(dòng)記錄所有方法調(diào)用的信息:

public class LoggingInvocationHandler implements InvocationHandler {
    private final Object target;
    public LoggingInvocationHandler(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("調(diào)用方法: " + method.getName() + ", 參數(shù): " + Arrays.toString(args));
        return method.invoke(target, args);
    }
    // 創(chuàng)建代理實(shí)例的工具方法
    public static <T> T createProxy(Class<T> clazz, T target) {
        return Reflection.newProxy(clazz, new LoggingInvocationHandler(target));
    }
}
// 示例:創(chuàng)建一個(gè)ArrayList的日志代理
List<String> proxyList = LoggingInvocationHandler.createProxy(List.class, new ArrayList<>());
proxyList.add("Guava");
proxyList.get(0);

在這個(gè)例子中,咱們通過(guò)動(dòng)態(tài)代理自動(dòng)為所有方法調(diào)用添加了日志記錄。這種方式不僅減少了重復(fù)代碼,還提高了代碼的可維護(hù)性。

案例3:優(yōu)化反射性能

使用反射時(shí),性能往往是個(gè)關(guān)鍵考慮。Guava提供的工具可以幫助咱們?cè)诒3执a可讀性的同時(shí),優(yōu)化反射操作的性能。比如,使用Invokable來(lái)代替原生的Method調(diào)用:

// 獲取Method實(shí)例
Method method = MyClass.class.getMethod("myMethod");
// 使用Guava的Invokable進(jìn)行封裝
Invokable<MyClass, Object> invokable = new Invokable<MyClass, Object>(method) {};
// 調(diào)用方法
MyClass instance = new MyClass();
Object result = invokable.invoke(instance);

在這個(gè)例子中,通過(guò)使用Invokable,咱們不僅簡(jiǎn)化了方法調(diào)用的過(guò)程,還能享受Guava在內(nèi)部進(jìn)行的性能優(yōu)化。

性能考量

在Java中,反射通常被認(rèn)為是性能的瓶頸,但實(shí)際上,如果正確使用,反射不一定會(huì)成為性能問(wèn)題。在Guava中,反射工具的設(shè)計(jì)考慮了性能優(yōu)化,讓我們?cè)谙硎芊瓷鋷?lái)的便利的同時(shí),也能保持良好的性能。

Guava反射與原生反射性能對(duì)比

首先,咱們來(lái)看看Guava反射和Java原生反射在性能上的對(duì)比。Guava的反射工具如TypeTokenInvokable等,在內(nèi)部進(jìn)行了許多優(yōu)化,比如緩存了一些反射操作的結(jié)果,減少了重復(fù)的計(jì)算。這意味著在許多情況下,使用Guava的反射工具可以比直接使用Java原生反射API更高效。

比如說(shuō),使用Method對(duì)象直接調(diào)用方法,每次調(diào)用都需要進(jìn)行權(quán)限檢查和參數(shù)類型匹配,這在頻繁調(diào)用時(shí)會(huì)造成性能負(fù)擔(dān)。而Guava的Invokable在內(nèi)部對(duì)這些信息進(jìn)行了緩存,減少了這些開銷。這就是為什么在需要頻繁進(jìn)行反射調(diào)用的場(chǎng)景中,使用Guava可能會(huì)帶來(lái)性能上的提升。

優(yōu)化反射操作的策略

然后,咱們來(lái)談?wù)勗谑褂梅瓷鋾r(shí),可以采取哪些策略來(lái)優(yōu)化性能:

  • 緩存反射對(duì)象:反射操作中,像MethodField對(duì)象的獲取是比較耗時(shí)的。如果可能,最好將這些對(duì)象緩存起來(lái),避免每次調(diào)用時(shí)重復(fù)獲取。
  • 減少不必要的反射調(diào)用:在設(shè)計(jì)軟件時(shí),應(yīng)盡量減少對(duì)反射的依賴。如果能通過(guò)正常的方法調(diào)用解決問(wèn)題,就不要使用反射。
  • 使用Guava的高級(jí)特性:Guava提供了許多高級(jí)的反射特性,比如TypeTokenInvokable。這些特性在內(nèi)部進(jìn)行了優(yōu)化,能有效減少反射帶來(lái)的性能負(fù)擔(dān)。

舉個(gè)例子,如果咱們有個(gè)方法需要頻繁調(diào)用,可以這樣做:

// 獲取方法對(duì)象,這是一個(gè)比較耗時(shí)的操作,所以只做一次
Method method = MyClass.class.getMethod("myMethod");
// 使用Guava的Invokable封裝方法對(duì)象
Invokable<MyClass, Object> invokable = new Invokable<MyClass, Object>(method) {};
// 后續(xù)調(diào)用
MyClass instance = new MyClass();
Object result = invokable.invoke(instance);

在這個(gè)例子中,咱們只獲取一次Method對(duì)象,然后使用Guava的Invokable進(jìn)行封裝。后續(xù)的調(diào)用就通過(guò)Invokable對(duì)象進(jìn)行,這樣就減少了每次調(diào)用時(shí)的開銷。

雖然反射在某些情況下可能會(huì)影響性能,但是通過(guò)合理的使用和一些優(yōu)化策略,咱們完全可以在保持代碼靈活性的同時(shí),控制其對(duì)性能的影響。Guava的反射工具在這方面做得非常好,它既提供了強(qiáng)大的功能,又考慮了性能優(yōu)化。所以,下次當(dāng)你需要使用反射時(shí),不妨考慮一下Guava。

最佳實(shí)踐和使用建議

通過(guò)這些小貼士,咱們可以確保代碼既利用了Guava帶來(lái)的便利,又保持了良好的設(shè)計(jì)和性能。

1. 明智選擇反射的場(chǎng)景

首先,反射是個(gè)強(qiáng)大但復(fù)雜的特性,所以在使用前,咱們得先問(wèn)問(wèn)自己:“我真的需要用反射嗎?”如果可以通過(guò)普通的方法調(diào)用或者接口實(shí)現(xiàn)來(lái)解決問(wèn)題,那就沒(méi)必要用反射。反射最適合的場(chǎng)景是在編譯時(shí)不知道類或方法的情況,比如在開發(fā)框架或者庫(kù)時(shí)。

2. 利用Guava提供的工具簡(jiǎn)化反射操作

如果確定要使用反射,Guava的工具類可以幫咱們大大簡(jiǎn)化操作。比如TypeToken可以幫我們處理泛型信息,Invokable則可以簡(jiǎn)化方法調(diào)用。舉個(gè)栗子,如果咱們想動(dòng)態(tài)地調(diào)用一個(gè)方法,而這個(gè)方法名和參數(shù)在編譯時(shí)是未知的,咱們可以這樣做:

// 假設(shè)這是我們要調(diào)用的方法名和參數(shù)
String methodName = "someMethod";
Object[] args = new Object[] { /* 參數(shù)列表 */ };

// 獲取Method對(duì)象
Method method = MyClass.class.getMethod(methodName, /* 參數(shù)類型 */);

// 使用Guava的Invokable簡(jiǎn)化調(diào)用
Invokable<MyClass, Object> invokable = new Invokable<MyClass, Object>(method) {};
Object result = invokable.invoke(new MyClass(), args);

通過(guò)這種方式,咱們不僅簡(jiǎn)化了反射操作,還能享受Guava在性能和易用性方面的優(yōu)勢(shì)。

3. 正確處理反射中的異常

反射操作中經(jīng)常會(huì)遇到各種異常,比如NoSuchMethodException、InvocationTargetException等。使用Guava時(shí),咱們需要妥善處理這些異常。一般來(lái)說(shuō),最好是將這些受檢異常轉(zhuǎn)換為運(yùn)行時(shí)異常,或者用日志記錄下來(lái),這樣可以保持代碼的整潔性和可讀性。

4. 保持性能的平衡

雖然Guava在反射方面做了很多優(yōu)化,但咱們?nèi)匀恍枰⒁庑阅軉?wèn)題。比如在頻繁調(diào)用的熱點(diǎn)代碼中使用反射,可能會(huì)成為性能瓶頸。在這種情況下,考慮將反射操作的結(jié)果緩存起來(lái),或者尋找替代方案,可能是更好的選擇。

5. 遵循Java編碼規(guī)范

最后,即使是使用了Guava的反射工具,咱們也不應(yīng)該忘記遵循Java的編碼規(guī)范和最佳實(shí)踐。比如,使用描述性的變量名,保持方法的簡(jiǎn)潔性,以及合理地組織代碼結(jié)構(gòu)等。這些基本原則在使用反射時(shí)同樣適用。

通過(guò)遵循這些最佳實(shí)踐,咱們可以確保在使用Guava反射工具時(shí),代碼既高效又易于維護(hù)。記住,工具是用來(lái)幫助我們解決問(wèn)題的,正確地使用它們,才能發(fā)揮出最大的效能。

總結(jié)

大家好,我是小黑。今天我們的Guava反射工具之旅就要告一段落了。在這一路上,咱們一起探索了Guava在Java反射方面提供的各種強(qiáng)大功能和工具。從TypeToken的泛型處理到Invokable的方法調(diào)用優(yōu)化,Guava都展現(xiàn)出了它在簡(jiǎn)化和增強(qiáng)Java反射方面的獨(dú)特魅力。

Guava反射工具的優(yōu)勢(shì)

首先,回顧一下Guava反射工具的優(yōu)勢(shì):

  • 類型安全:Guava的TypeToken提供了一種處理泛型的方法,讓泛型操作更安全、更直觀。
  • 簡(jiǎn)化操作:比如Invokable,它簡(jiǎn)化了反射中的方法調(diào)用,使代碼更加清晰易懂。
  • 性能考量:雖然反射通常被認(rèn)為會(huì)影響性能,但Guava在內(nèi)部進(jìn)行了一些優(yōu)化,如緩存,從而減少了性能損耗。

應(yīng)用場(chǎng)景

接著,咱們也看到了Guava反射工具在實(shí)際應(yīng)用中的幾個(gè)例子,從類型安全的數(shù)據(jù)轉(zhuǎn)換到動(dòng)態(tài)日志記錄,Guava都提供了優(yōu)雅的解決方案。這些例子展示了Guava反射工具在不同場(chǎng)景下的實(shí)用性和靈活性。

注意事項(xiàng)

當(dāng)然,使用反射,尤其是在一個(gè)像Guava這樣的庫(kù)中,也需要注意一些事項(xiàng):

  • 合理選擇使用場(chǎng)景:并不是所有情況下都需要反射,評(píng)估需求,合理選擇才是關(guān)鍵。
  • 注意性能影響:雖然Guava進(jìn)行了優(yōu)化,但反射操作本身還是比直接調(diào)用方法要慢,因此在性能敏感的場(chǎng)景中要小心使用。
  • 遵循Java編碼規(guī)范:即使使用了高級(jí)工具,編寫清晰、規(guī)范的代碼也同樣重要。

希望這些知識(shí)能幫助大家在實(shí)際工作中更好地利用Guava的強(qiáng)大功能,寫出更優(yōu)雅、更高效的Java代碼。Guava確實(shí)是一個(gè)功能豐富的庫(kù),它不僅僅是關(guān)于集合和緩存,它在反射方面的工具也同樣強(qiáng)大。

以上就是Guava反射工具使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Guava反射工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法

    Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法

    這篇文章主要介紹了Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java接口定義與實(shí)現(xiàn)方法分析

    Java接口定義與實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Java接口定義與實(shí)現(xiàn)方法,簡(jiǎn)單說(shuō)明了接口的概念、功能,并結(jié)合實(shí)例形式分析了接口的相關(guān)定義與使用技巧,需要的朋友可以參考下
    2017-11-11
  • Java終止線程的幾種方式實(shí)例總結(jié)

    Java終止線程的幾種方式實(shí)例總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java終止線程的幾種方式,線程停止即Terminated狀態(tài)是伴隨run方法的結(jié)束而生,也就是run完成后由Thread類來(lái)決定線程停止了,銷毀資源釋放空間,下面需要的朋友可以參考下
    2023-06-06
  • "Method?Not?Allowed"405問(wèn)題分析以及解決方法

    "Method?Not?Allowed"405問(wèn)題分析以及解決方法

    項(xiàng)目中在提交表單時(shí),提示“HTTP 405”錯(cuò)誤——“Method Not Allowed”這里顯示的是,方法不被允許,下面這篇文章主要給大家介紹了關(guān)于"Method?Not?Allowed"405問(wèn)題分析以及解決方法的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 如何解決freemarker靜態(tài)化生成html頁(yè)面亂碼的問(wèn)題

    如何解決freemarker靜態(tài)化生成html頁(yè)面亂碼的問(wèn)題

    這篇文章主要介紹了如何解決freemarker靜態(tài)化生成html頁(yè)面亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java使用正則表達(dá)式判斷手機(jī)號(hào)的方法示例

    java使用正則表達(dá)式判斷手機(jī)號(hào)的方法示例

    這篇文章主要介紹了java使用正則表達(dá)式判斷手機(jī)號(hào)的方法,分析了手機(jī)號(hào)碼段的原理及java使用正則表達(dá)式針對(duì)手機(jī)號(hào)的匹配操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • springboot實(shí)現(xiàn)將自定義日志格式存儲(chǔ)到mongodb中

    springboot實(shí)現(xiàn)將自定義日志格式存儲(chǔ)到mongodb中

    這篇文章主要介紹了springboot實(shí)現(xiàn)將自定義日志格式存儲(chǔ)到mongodb中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 基于java實(shí)現(xiàn)websocket協(xié)議過(guò)程詳解

    基于java實(shí)現(xiàn)websocket協(xié)議過(guò)程詳解

    這篇文章主要介紹了基于java實(shí)現(xiàn)websocket協(xié)議過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射

    淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射

    這篇文章主要介紹了resultMap的用法及關(guān)聯(lián)結(jié)果集映射操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MyBatis通用Mapper實(shí)現(xiàn)原理及相關(guān)內(nèi)容

    MyBatis通用Mapper實(shí)現(xiàn)原理及相關(guān)內(nèi)容

    今天小編就為大家分享一篇關(guān)于MyBatis通用Mapper實(shí)現(xiàn)原理及相關(guān)內(nèi)容,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論