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

SpringBoot隱式參數(shù)注入的碼優(yōu)雅升級(jí)指南

 更新時(shí)間:2026年03月10日 09:36:35   作者:小碼哥_常  
這篇文章主要為大家詳細(xì)介紹了SpringBoot中隱式參數(shù)注入的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、開發(fā)中的痛點(diǎn):重復(fù)參數(shù)處理的困擾

在 Spring Boot 開發(fā)的旅程中,相信不少小伙伴都遭遇過這樣的場(chǎng)景:項(xiàng)目中眾多接口需要獲取當(dāng)前登錄用戶 ID、請(qǐng)求來源等通用參數(shù) 。為了獲取這些參數(shù),不得不一遍又一遍地在 Controller 層寫下類似request.getAttribute("userId")這樣的代碼,不僅繁瑣,還容易出錯(cuò)。

想象一下,你正在開發(fā)一個(gè)電商項(xiàng)目,有商品展示、用戶訂單、購(gòu)物車管理等多個(gè)模塊,每個(gè)模塊都包含若干接口。以獲取當(dāng)前登錄用戶 ID 為例,在商品詳情接口中,你可能會(huì)這樣寫:

@GetMapping("/product/{productId}")
public ResponseEntity<Product> getProductDetails(@PathVariable Long productId, HttpServletRequest request) {
    String userId = (String) request.getAttribute("userId");
    // 業(yè)務(wù)邏輯,根據(jù)userId和productId獲取商品詳情
    Product product = productService.getProductDetails(productId, userId);
    return ResponseEntity.ok(product);
}

而在訂單創(chuàng)建接口中,同樣需要獲取用戶 ID:

@PostMapping("/order")
public ResponseEntity<Order> createOrder(@RequestBody OrderRequest orderRequest, HttpServletRequest request) {
    String userId = (String) request.getAttribute("userId");
    // 業(yè)務(wù)邏輯,根據(jù)userId和訂單請(qǐng)求創(chuàng)建訂單
    Order order = orderService.createOrder(orderRequest, userId);
    return ResponseEntity.ok(order);
}

隨著項(xiàng)目規(guī)模的擴(kuò)大,這樣的代碼不斷重復(fù),維護(hù)成本直線上升。一旦參數(shù)獲取的邏輯發(fā)生變化,比如用戶 ID 的存儲(chǔ)方式從 Session 改為 JWT 令牌,就需要在所有涉及獲取用戶 ID 的地方進(jìn)行修改,稍有遺漏,就可能導(dǎo)致線上問題。而且,手動(dòng)處理參數(shù)時(shí),很容易忽略邊界情況。比如,當(dāng)用戶未登錄時(shí),request.getAttribute("userId")會(huì)返回 null,如果沒有進(jìn)行判空處理,直接使用 userId,就會(huì)拋出NullPointerException ,影響用戶體驗(yàn),增加排查問題的難度。

二、為何重復(fù)參數(shù)處理成 “坑”

代碼冗余,維護(hù)成本飆升

在大型項(xiàng)目中,代碼冗余帶來的維護(hù)成本問題尤為突出。以獲取當(dāng)前登錄用戶 ID 為例,傳統(tǒng)做法要么在 Controller 里通過HttpServletRequest獲取請(qǐng)求頭或請(qǐng)求參數(shù)里的用戶信息,再傳給 Service;要么用ThreadLocal把用戶信息存在線程上下文里,在 Service 層直接獲取 。不管哪種方式,只要多個(gè)接口、多個(gè) Service 需要用到用戶信息,就必須重復(fù)寫這段邏輯。

我曾參與的一個(gè)中型電商項(xiàng)目,單是 “獲取用戶 ID 并轉(zhuǎn)換為 Long 類型” 這段代碼,就在 23 個(gè)地方出現(xiàn)過。后來因?yàn)橛脩?ID 規(guī)則調(diào)整,從自增 Long 改成 String,光是修改這些重復(fù)代碼就花了大半天時(shí)間,還差點(diǎn)漏改了兩個(gè)隱藏在工具類里的地方。這不僅耗費(fèi)了大量的人力和時(shí)間,還增加了出錯(cuò)的風(fēng)險(xiǎn)。一旦有遺漏,就可能導(dǎo)致部分功能無法正常使用,影響用戶體驗(yàn),進(jìn)而影響業(yè)務(wù)的正常開展。

手動(dòng)處理,容錯(cuò)性差強(qiáng)人意

手動(dòng)處理參數(shù)時(shí),開發(fā)人員很容易忽略邊界情況。比如,當(dāng)用戶未登錄時(shí),request.getAttribute("userId")會(huì)返回 null,如果直接進(jìn)行類型強(qiáng)轉(zhuǎn),就會(huì)拋出ClassCastException;或者前端傳的用戶 ID 格式不對(duì),轉(zhuǎn)成 Long 時(shí)會(huì)拋NumberFormatException 。這些問題如果沒做統(tǒng)一的異常處理,就會(huì)直接暴露給用戶,影響體驗(yàn)。

更麻煩的是,不同開發(fā)人員處理這些邊界情況的方式不一樣。有的加了判空處理,有的沒加;有的返回 401 未授權(quán)錯(cuò)誤,有的返回 500 服務(wù)器內(nèi)部錯(cuò)誤,導(dǎo)致項(xiàng)目代碼風(fēng)格混亂,排查問題時(shí)也找不到統(tǒng)一的入口。這使得代碼的可讀性和可維護(hù)性大大降低,增加了后續(xù)開發(fā)和維護(hù)的難度。 當(dāng)項(xiàng)目規(guī)模逐漸擴(kuò)大,參與的開發(fā)人員越來越多時(shí),這種問題會(huì)變得更加嚴(yán)重,甚至可能導(dǎo)致項(xiàng)目的進(jìn)度受到影響。

三、Spring Boot 的 “秘密武器”:隱式參數(shù)注入

其實(shí) Spring Boot 早就為我們提供了更優(yōu)雅的解決方案,只是很多人沒注意到 —— 通過自定義 HandlerMethodArgumentResolver,實(shí)現(xiàn)參數(shù)的隱式注入,讓框架幫我們搞定這些重復(fù)且容易出錯(cuò)的邏輯。

Spring MVC 提供了一個(gè)解決方案:自定義參數(shù)解析器(HandlerMethodArgumentResolver)。這個(gè)設(shè)計(jì)模式體現(xiàn)了 Spring 框架一貫的 “約定優(yōu)于配置” 的理念 。它不要求我們改變 Filter 層面的實(shí)現(xiàn),而是在參數(shù)解析這個(gè)環(huán)節(jié)做文章,通過擴(kuò)展框架的能力來解決問題。

Spring MVC 的 HandlerMethodArgumentResolver 機(jī)制實(shí)際上是一種 “適配器模式” 的應(yīng)用。它將不同來源的參數(shù)(Request 參數(shù)、Path 變量、Header 信息、Session 數(shù)據(jù)等)統(tǒng)一適配成 Controller 方法可以直接使用的形式。這種設(shè)計(jì)的巧妙之處在于職責(zé)分離,F(xiàn)ilter 負(fù)責(zé)認(rèn)證和設(shè)置狀態(tài),Resolver 負(fù)責(zé)參數(shù)轉(zhuǎn)換;具備可擴(kuò)展性,可以輕松添加新的參數(shù)解析邏輯;無侵入性,不影響現(xiàn)有的代碼結(jié)構(gòu)。這個(gè)方案的核心思想是將request.getAttribute()操作,封裝成類型安全的方法參數(shù) 。

四、三步走,實(shí)現(xiàn)隱式參數(shù)注入

第一步:定義參數(shù)封裝類(DTO)

首先,我們需要一個(gè)類來封裝要注入的參數(shù),比如當(dāng)前登錄用戶的 ID、用戶名、角色等信息 。這個(gè)類不用加任何特殊注解,就是一個(gè)普通的 POJO:

import lombok.Data;

/**
 * 當(dāng)前登錄用戶信息封裝類
 */
@Data
public class CurrentUser {
    // 用戶ID
    private Long userId;
    // 用戶名
    private String username;
    // 用戶角色
    private String role;
    // 登錄token(可選,根據(jù)業(yè)務(wù)需求添加)
    private String token;
}

這里要注意:封裝類里的字段要跟你從請(qǐng)求中獲取到的用戶信息對(duì)應(yīng),比如從 JWT 令牌解析出的用戶 ID、用戶名,或者從 Session 中獲取的角色信息。字段類型也要提前確定好,避免后續(xù)轉(zhuǎn)換時(shí)出問題。

第二步:自定義參數(shù)解析器(HandlerMethodArgumentResolver)

這是實(shí)現(xiàn)隱式注入的關(guān)鍵步驟。Spring Boot 在處理 Controller 方法參數(shù)時(shí),會(huì)調(diào)用 HandlerMethodArgumentResolver 接口的兩個(gè)方法:supportsParameter判斷當(dāng)前參數(shù)是否需要用這個(gè)解析器處理,resolveArgument則是具體的參數(shù)獲取和封裝邏輯 。我們先寫一個(gè)自定義的解析器,實(shí)現(xiàn)從請(qǐng)求頭的 JWT 令牌中解析用戶信息,并封裝成CurrentUser對(duì)象:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

@Component
public class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver {
    // 注入JWT工具類(實(shí)際項(xiàng)目中可自行實(shí)現(xiàn))
    @Autowired
    private JwtUtils jwtUtils;

    /**
     * 判斷參數(shù)是否需要解析:如果參數(shù)類型是CurrentUser,且加了@CurrentUser注解(后面會(huì)定義),就用這個(gè)解析器
     */
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        //1. 判斷參數(shù)類型是否是CurrentUser
        boolean isCurrentUserType = parameter.getParameterType().equals(CurrentUser.class);
        // 2. 判斷參數(shù)是否加了@CurrentUser注解
        boolean hasCurrentUserAnnotation = parameter.hasParameterAnnotation(CurrentUser.class);
        // 兩個(gè)條件都滿足才解析
        return isCurrentUserType && hasCurrentUserAnnotation;
    }

    /**
     * 具體的參數(shù)解析邏輯:從請(qǐng)求頭獲取JWT令牌,解析出用戶信息,封裝成CurrentUser對(duì)象
     */
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        // 1. 從請(qǐng)求頭獲取JWT令牌(假設(shè)前端將令牌放在Authorization請(qǐng)求頭中,格式為Bearer xxx)
        String authorizationHeader = webRequest.getHeader("Authorization");
        if (authorizationHeader == null ||!authorizationHeader.startsWith("Bearer ")) {
            throw new IllegalArgumentException("無效的令牌格式");
        }
        String token = authorizationHeader.substring(7);
        // 2. 解析JWT令牌,獲取用戶信息
        return jwtUtils.parseToken(token);
    }
}

這里有兩個(gè)關(guān)鍵點(diǎn)需要注意:我們定義了一個(gè)@CurrentUser注解(代碼在下一步),用來標(biāo)記需要隱式注入的參數(shù)。在resolveArgument方法中,一定要做好異常處理。比如令牌不存在、令牌過期、令牌解析失敗等情況,要根據(jù)業(yè)務(wù)需求返回默認(rèn)值或拋出統(tǒng)一的異常(建議結(jié)合全局異常處理器使用),避免直接拋原生異常。

第三步:注冊(cè)參數(shù)解析器

最后一步,我們要把自定義的參數(shù)解析器注冊(cè)到 Spring 的參數(shù)解析器鏈中,這樣 Spring 在處理 Controller 方法參數(shù)時(shí),才會(huì)調(diào)用我們自定義的解析器。在 Spring Boot 中,通過實(shí)現(xiàn)WebMvcConfigurer接口的addArgumentResolvers方法來完成注冊(cè):

import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private CurrentUserArgumentResolver currentUserArgumentResolver;

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(currentUserArgumentResolver);
    }
}

至此,隱式參數(shù)注入的配置就全部完成了。接下來,我們?cè)?Controller 中使用時(shí),就可以像這樣:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user/info")
    public String getUserInfo(CurrentUser currentUser) {
        return "當(dāng)前用戶ID: " + currentUser.getUserId() + ", 用戶名: " + currentUser.getUsername();
    }
}

可以看到,Controller 中不再需要手動(dòng)從HttpServletRequest獲取用戶信息,代碼變得簡(jiǎn)潔明了。

五、案例實(shí)戰(zhàn):注入當(dāng)前登錄用戶信息

Filter 層解析 Token

在實(shí)際項(xiàng)目中,我們通常會(huì)在 Filter 層對(duì) JWT Token 進(jìn)行解析,獲取用戶信息,并將其存入HttpServletRequest中,以便后續(xù)在 Controller 層獲取 。下面是一個(gè)簡(jiǎn)單的 Filter 示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {

    @Autowired
    private JwtUtils jwtUtils;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String authorizationHeader = request.getHeader("Authorization");
        if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
            String token = authorizationHeader.substring(7);
            try {
                // 解析JWT Token,獲取用戶ID
                Long userId = jwtUtils.parseToken(token).getUserId();
                // 將用戶ID存入request中
                request.setAttribute("userId", userId);
            } catch (Exception e) {
                // Token無效,繼續(xù)執(zhí)行后續(xù)邏輯
                logger.error("Token解析失敗", e);
            }
        }
        filterChain.doFilter(request, response);
    }
}

在上述代碼中,JwtAuthenticationFilter過濾器會(huì)在每次請(qǐng)求進(jìn)入時(shí)被調(diào)用 。它首先從請(qǐng)求頭中獲取Authorization字段,如果存在且以Bearer 開頭,則提取出 Token 并調(diào)用JwtUtils工具類進(jìn)行解析,獲取用戶 ID 后存入request的屬性中。

Controller 層使用隱式注入

在 Controller 層,我們可以通過自定義的參數(shù)解析器,實(shí)現(xiàn)當(dāng)前登錄用戶信息的隱式注入 。假設(shè)我們有一個(gè)獲取用戶個(gè)人信息的接口,代碼如下:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user/info")
    public String getUserInfo(CurrentUser currentUser) {
        return "當(dāng)前用戶ID: " + currentUser.getUserId() + ", 用戶名: " + currentUser.getUsername();
    }
}

可以看到,通過隱式注入,我們?cè)?Controller 方法中直接使用CurrentUser參數(shù),就可以獲取到當(dāng)前登錄用戶的信息,無需再手動(dòng)從HttpServletRequest中獲取 。這樣不僅簡(jiǎn)化了代碼,還提高了代碼的可讀性和可維護(hù)性。如果需要在 Service 層使用當(dāng)前登錄用戶信息,也可以通過方法參數(shù)傳遞的方式,將CurrentUser對(duì)象傳遞給 Service 方法,確保業(yè)務(wù)邏輯的清晰和連貫。

六、隱式參數(shù)注入的顯著優(yōu)勢(shì)

類型安全,編譯時(shí)檢查錯(cuò)誤

在傳統(tǒng)的參數(shù)獲取方式中,從HttpServletRequest獲取的參數(shù)通常是Object類型,需要手動(dòng)進(jìn)行類型轉(zhuǎn)換 。這就容易出現(xiàn)ClassCastException,而且這種錯(cuò)誤只有在運(yùn)行時(shí)才會(huì)暴露出來,增加了排查問題的難度。而使用隱式參數(shù)注入,參數(shù)類型在編譯時(shí)就能確定,一旦出現(xiàn)類型不匹配的情況,編譯器會(huì)直接報(bào)錯(cuò),提前發(fā)現(xiàn)問題,避免在生產(chǎn)環(huán)境中出現(xiàn)類型轉(zhuǎn)換錯(cuò)誤,提高了代碼的穩(wěn)定性和可靠性。 例如,在獲取用戶 ID 時(shí),如果使用傳統(tǒng)方式從request中獲取,可能會(huì)因?yàn)轭愋娃D(zhuǎn)換錯(cuò)誤導(dǎo)致程序崩潰;而使用隱式參數(shù)注入,編譯器會(huì)在編譯階段就檢查出類型錯(cuò)誤,讓開發(fā)者及時(shí)修正。

代碼簡(jiǎn)潔,專注業(yè)務(wù)邏輯

Controller 層的主要職責(zé)是處理用戶請(qǐng)求,調(diào)用 Service 層的業(yè)務(wù)邏輯,并返回響應(yīng)結(jié)果 。在傳統(tǒng)的參數(shù)處理方式下,Controller 層充斥著大量重復(fù)的參數(shù)獲取和轉(zhuǎn)換代碼,使得代碼冗長(zhǎng)、可讀性差,也讓業(yè)務(wù)邏輯變得不清晰。通過隱式參數(shù)注入,這些參數(shù)獲取的邏輯被封裝在參數(shù)解析器中,Controller 層只需要關(guān)注核心業(yè)務(wù)邏輯,代碼變得簡(jiǎn)潔明了,更易于維護(hù)和擴(kuò)展。 比如,在一個(gè)電商項(xiàng)目的訂單創(chuàng)建接口中,使用隱式參數(shù)注入后,Controller 層的代碼只需要關(guān)注訂單創(chuàng)建的業(yè)務(wù)邏輯,而無需再處理用戶 ID 等參數(shù)的獲取,代碼行數(shù)減少了近三分之一,大大提高了代碼的可讀性和可維護(hù)性。

可測(cè)試性強(qiáng),Mock 簡(jiǎn)單直接

在進(jìn)行單元測(cè)試時(shí),模擬參數(shù)值是一個(gè)常見的操作 。使用隱式參數(shù)注入,我們可以直接在測(cè)試方法中傳入模擬的參數(shù)對(duì)象,無需像傳統(tǒng)方式那樣構(gòu)建復(fù)雜的HttpServletRequest對(duì)象。這使得單元測(cè)試更加簡(jiǎn)單直接,提高了測(cè)試的效率和準(zhǔn)確性。 例如,在測(cè)試一個(gè)需要獲取當(dāng)前登錄用戶信息的接口時(shí),使用隱式參數(shù)注入,我們可以直接在測(cè)試方法中創(chuàng)建一個(gè)CurrentUser對(duì)象,并傳入到被測(cè)試的方法中,輕松模擬不同用戶登錄的場(chǎng)景,而不需要手動(dòng)設(shè)置HttpServletRequest的屬性,大大簡(jiǎn)化了測(cè)試代碼。

七、總結(jié)與展望

Spring Boot 的隱式參數(shù)注入功能,就像是為我們的開發(fā)工作注入了一股 “清流” 。它巧妙地解決了重復(fù)參數(shù)處理的難題,讓我們告別繁瑣的代碼,專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。通過自定義 HandlerMethodArgumentResolver,我們僅需簡(jiǎn)單的三步操作,就能實(shí)現(xiàn)參數(shù)的自動(dòng)注入,使代碼更簡(jiǎn)潔、更安全、更易于測(cè)試。

在實(shí)際項(xiàng)目中,這種方式能顯著提升開發(fā)效率,減少出錯(cuò)概率,讓項(xiàng)目的維護(hù)和擴(kuò)展更加輕松。建議大家在今后的 Spring Boot 項(xiàng)目中積極嘗試使用隱式參數(shù)注入,相信它會(huì)給你帶來意想不到的便利 。同時(shí),也期待大家在實(shí)踐中不斷探索,發(fā)現(xiàn)更多 Spring Boot 的強(qiáng)大功能,讓我們的開發(fā)之路更加順暢。

以上就是SpringBoot隱式參數(shù)注入的碼優(yōu)雅升級(jí)指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot隱式參數(shù)注入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Java中的File文件類以及FileDescriptor文件描述類

    詳解Java中的File文件類以及FileDescriptor文件描述類

    在Java中File類可以用來新建文件和目錄對(duì)象,而FileDescriptor類則被用來表示文件或目錄的可操作性,接下來我們就來詳解Java中的File文件類以及FileDescriptor文件描述類
    2016-06-06
  • Java代理模式實(shí)例分析

    Java代理模式實(shí)例分析

    這篇文章主要介紹了Java代理模式,結(jié)合實(shí)例形式對(duì)比分析了java代理模式的使用方法與相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Java Predicate接口源碼使用示例

    Java Predicate接口源碼使用示例

    Java8引入了許多函數(shù)式接口(Functional Interface),Predicate(斷言)就是其中一個(gè),它的主要作用可以簡(jiǎn)單描述為:向其傳入一個(gè)對(duì)象(可以理解為參數(shù)),將得到一個(gè)布爾值作為輸出,這篇文章主要介紹了Java Predicate接口源碼使用示例,需要的朋友可以參考下
    2025-04-04
  • 詳解spring boot整合JMS(ActiveMQ實(shí)現(xiàn))

    詳解spring boot整合JMS(ActiveMQ實(shí)現(xiàn))

    本篇文章主要介紹了詳解spring boot整合JMS(ActiveMQ實(shí)現(xiàn)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Mac下設(shè)置Java默認(rèn)版本的方法

    Mac下設(shè)置Java默認(rèn)版本的方法

    今天工作的時(shí)候發(fā)現(xiàn)了一個(gè)錯(cuò)誤,提示java版本太低,無法啟動(dòng)!想起自己裝過高版本的Java,但是卻沒有默認(rèn)啟動(dòng),從網(wǎng)上找了一些資料,整理下現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-10-10
  • Spring?Boot?常用注解速查表(快速查找)

    Spring?Boot?常用注解速查表(快速查找)

    本文整理SpringBoot常用注解速查表,分核心組件(IOC/AOP)、Web開發(fā)、配置類、數(shù)據(jù)訪問及測(cè)試等類別,簡(jiǎn)明說明各注解作用與使用場(chǎng)景,便于開發(fā)時(shí)快速查閱與應(yīng)用,需要的朋友跟隨小編一起學(xué)習(xí)下吧
    2025-08-08
  • Java使用Spring發(fā)送郵件的實(shí)現(xiàn)代碼

    Java使用Spring發(fā)送郵件的實(shí)現(xiàn)代碼

    本篇文章主要介紹了使用Spring發(fā)送郵件的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • SpringBoot如何實(shí)現(xiàn)讀取.config文件

    SpringBoot如何實(shí)現(xiàn)讀取.config文件

    文章介紹如何在Java中讀取XML文件:通過創(chuàng)建XML數(shù)據(jù)源、定義POJO類(含父類Menudata和子類Menudatas)、編寫解析工具、實(shí)現(xiàn)Service層及Controller調(diào)用,最終使用Layui框架展示數(shù)據(jù),強(qiáng)調(diào)文件后綴轉(zhuǎn)換及層級(jí)結(jié)構(gòu)處理
    2025-08-08
  • java使用compareTo實(shí)現(xiàn)一個(gè)類的對(duì)象之間比較大小操作

    java使用compareTo實(shí)現(xiàn)一個(gè)類的對(duì)象之間比較大小操作

    這篇文章主要介紹了java使用compareTo實(shí)現(xiàn)一個(gè)類的對(duì)象之間比較大小操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java的封裝類和裝箱拆箱詳解

    Java的封裝類和裝箱拆箱詳解

    Java中存在基礎(chǔ)數(shù)據(jù)類型,但是在某些情況下,我們要對(duì)基礎(chǔ)數(shù)據(jù)類型進(jìn)行對(duì)象的操作,例如,集合中只能存對(duì)象,而不能存在基礎(chǔ)數(shù)據(jù)類型,于是便出現(xiàn)了封裝類,本文將詳細(xì)給大家介紹Java封裝類和裝箱拆箱,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

双流县| 中阳县| 彭山县| 绿春县| 蓝山县| 太白县| 六安市| 凤阳县| 景德镇市| 平乐县| 天津市| 梧州市| 儋州市| 星座| 宁南县| 华亭县| 阳新县| 八宿县| 湾仔区| 志丹县| 谢通门县| 南川市| 苏州市| 航空| 始兴县| 莆田市| 南皮县| 栾川县| 五华县| 贞丰县| 洛浦县| 辰溪县| 徐闻县| 织金县| 阿瓦提县| 泾源县| 宁陵县| 察雅县| 筠连县| 隆昌县| 景东|