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

基于Java開(kāi)發(fā)一個(gè)Markdown到Word文檔轉(zhuǎn)換工具

 更新時(shí)間:2025年07月14日 09:46:36   作者:碼銀  
本文介紹了一個(gè)用Java開(kāi)發(fā)的Markdown到Word文檔轉(zhuǎn)換工具,該工具通過(guò)MarkdownToWordConverter類(lèi)實(shí)現(xiàn),利用flexmark庫(kù)將Markdown內(nèi)容轉(zhuǎn)換為HTML,借助jsoup庫(kù)規(guī)范化HTML,再通過(guò)docx4j庫(kù)將處理后的HTML導(dǎo)入并保存為Word文檔,需要的朋友可以參考下

操作環(huán)境:Java8,win10,idea2024,其余依賴(lài)版本請(qǐng)看標(biāo)題四

一、引言

在文檔處理場(chǎng)景中,將Markdown格式的文本轉(zhuǎn)換為Word文檔是常見(jiàn)需求。Markdown因其簡(jiǎn)潔的語(yǔ)法廣泛應(yīng)用于文檔編寫(xiě),而Word文檔在辦公環(huán)境中具有更好的兼容性和格式編輯功能。本文實(shí)現(xiàn)的工具提供了一種便捷的方式,將Markdown內(nèi)容轉(zhuǎn)換為Word文檔,滿足不同場(chǎng)景下的文檔使用需求。

二、MarkdownToWordConverter類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)

2.1 類(lèi)結(jié)構(gòu)與功能概述

MarkdownToWordConverter類(lèi)包含了將Markdown內(nèi)容轉(zhuǎn)換為Word文檔所需的多個(gè)方法,涵蓋了從Markdown到HTML的轉(zhuǎn)換、HTML內(nèi)容的規(guī)范化處理、安全XML讀取器的創(chuàng)建、Word文檔包的構(gòu)建以及文檔保存等核心步驟。

2.2 Markdown到HTML的轉(zhuǎn)換

convertMarkdownToHtml方法負(fù)責(zé)將Markdown內(nèi)容轉(zhuǎn)換為HTML。它使用flexmark庫(kù)中的ParserHtmlRenderer,通過(guò)MutableDataSet配置解析和渲染選項(xiàng),具體實(shí)現(xiàn)如下:

    /**
     * 將 Markdown 內(nèi)容轉(zhuǎn)換為 HTML 內(nèi)容
     * @param markdownContent Markdown 內(nèi)容
     * @return 轉(zhuǎn)換后的 HTML 內(nèi)容
     */
    private static String convertMarkdownToHtml(String markdownContent) {
        // 創(chuàng)建一個(gè)可變的數(shù)據(jù)集,用于配置解析器和渲染器的選項(xiàng)
        MutableDataSet options = new MutableDataSet();

        // 創(chuàng)建 Markdown 解析器和 HTML 渲染器
        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();

        // 解析 Markdown 內(nèi)容
        Document document = parser.parse(markdownContent);

        // 渲染為 HTML 內(nèi)容
        return renderer.render(document);
    }

2.3 HTML內(nèi)容的規(guī)范化與清理

convertMarkdownToWord方法在將Markdown轉(zhuǎn)換為HTML后,使用jsoup庫(kù)對(duì)HTML內(nèi)容進(jìn)行規(guī)范化處理。通過(guò)設(shè)置outputSettings,使HTML符合XML語(yǔ)法和XHTML轉(zhuǎn)義模式,并清理多余的空行和字符,代碼如下:

org.jsoup.nodes.Document jsoupDoc = Jsoup.parse(htmlContent);
jsoupDoc.outputSettings().syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml);
jsoupDoc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);
htmlContent = jsoupDoc.html();
htmlContent = htmlContent.replaceAll("(?m)^[ \t]*\r?\n", "");

這里 (?m) 是多行模式,^ 匹配每行的開(kāi)頭,[ \t]* 匹配 0 個(gè)或多個(gè)空格或制表符,\r?\n
匹配換行符,整個(gè)正則表達(dá)式的作用是匹配每行開(kāi)頭的空白字符和換行符,然后將其替換為空字符串

  • jsoupDoc.outputSettings().syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml);
    這行代碼調(diào)用 outputSettings() 方法獲取 jsoupDoc 的輸出設(shè)置對(duì)象,然后使用 syntax() 方法將輸出語(yǔ)法設(shè)置為 XML。在 HTML 中,標(biāo)簽閉合規(guī)則相對(duì)寬松,比如標(biāo)簽可以不閉合;而在 XML 中,所有標(biāo)簽都必須正確閉合,像這樣。通過(guò)將輸出語(yǔ)法設(shè)置為 XML,能確保生成的 HTML 內(nèi)容遵循嚴(yán)格的標(biāo)簽閉合規(guī)則。
  • jsoupDoc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);
    這行代碼同樣先調(diào)用 outputSettings() 方法獲取輸出設(shè)置對(duì)象,接著使用 escapeMode() 方法將字符轉(zhuǎn)義模式設(shè)置為 Entities.EscapeMode.xhtml。在 HTML 里,一些特殊字符(如 <、>、& 等)需要進(jìn)行轉(zhuǎn)義,否則可能會(huì)導(dǎo)致解析錯(cuò)誤。將轉(zhuǎn)義模式設(shè)置為 xhtml 后,Jsoup 會(huì)把這些特殊字符轉(zhuǎn)換為對(duì)應(yīng)的 XHTML 實(shí)體引用,例如將 < 轉(zhuǎn)換為 <,> 轉(zhuǎn)換為 >,& 轉(zhuǎn)換為 &。

2.4 創(chuàng)建安全的XMLReader

為了確保XML讀取的安全性,使用SAXParserFactory創(chuàng)建XMLReader,禁用DOCTYPE聲明以及外部通用實(shí)體和參數(shù)實(shí)體,代碼如下:

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
XMLReader xmlReader = factory.newSAXParser().getXMLReader();

2.5 構(gòu)建與保存Word文檔

利用docx4j庫(kù)構(gòu)建Word文檔包。創(chuàng)建WordprocessingMLPackage,獲取MainDocumentPart,通過(guò)XHTMLImporterImpl將規(guī)范化后的HTML內(nèi)容導(dǎo)入到Word文檔的Body部分,最后使用Docx4J保存文檔,代碼如下:

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
Body body = mainDocumentPart.getJaxbElement().getBody();
body.getContent().addAll(XHTMLImporter.convert(htmlContent, null));
Docx4J.save(wordMLPackage, new File(outputFilePath), Docx4J.FLAG_NONE);

2.6 讀取Markdown文件內(nèi)容

readMarkdownFromFile方法從指定路徑的文件中讀取Markdown內(nèi)容,使用BufferedReader逐行讀取并構(gòu)建字符串,代碼如下:

public static String readMarkdownFromFile(String filePath) throws IOException {
    StringBuilder content = new StringBuilder();
    try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
        String line;
        while ((line = reader.readLine()) != null) {
            content.append(line).append("\n");
        }
    }
    return content.toString();
}

三、工具使用示例

main方法中,通過(guò)指定Markdown文件路徑和輸出Word文檔路徑,展示了工具的使用方法。先讀取Markdown文件內(nèi)容,然后調(diào)用convertMarkdownToWord方法進(jìn)行轉(zhuǎn)換,并在控制臺(tái)輸出轉(zhuǎn)換結(jié)果信息,代碼如下:

public static void main(String[] args) {
    String markdownFilePath = "C:\\Users\\admin\\Desktop\\salaries.md";
    String outputWordFilePath = "C:\\Users\\admin\\Desktop\\file.docx";
    try {
        String markdownContent = readMarkdownFromFile(markdownFilePath);
        convertMarkdownToWord(markdownContent, outputWordFilePath);
        System.out.println("Markdown 轉(zhuǎn)換為 Word 文檔成功!");
    } catch (Exception e) {
        System.err.println("轉(zhuǎn)換過(guò)程中出現(xiàn)錯(cuò)誤: " + e.getMessage());
        e.printStackTrace();
    }
}

四、依賴(lài)管理

工具的實(shí)現(xiàn)依賴(lài)多個(gè)Java庫(kù),包括flexmark用于Markdown解析,jsoup用于HTML處理,docx4j用于Word文檔操作,以及日志、XML處理等相關(guān)庫(kù)。在pom.xml文件中,詳細(xì)列出了各個(gè)依賴(lài)及其版本號(hào),如下所示:

<dependencies>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.15</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>2.0.44</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.14.0</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.29</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-JAXB-Internal</artifactId>
        <version>8.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-ImportXHTML</artifactId>
        <version>8.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics</artifactId>
        <version>1.11.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.36</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.36</version>
    </dependency>
    <dependency>
        <groupId>com.vladsch.flexmark</groupId>
        <artifactId>flexmark</artifactId>
        <version>0.60.2</version>
    </dependency>
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.16.1</version>
    </dependency>
</dependencies>

五、轉(zhuǎn)化效果

對(duì)于文字的轉(zhuǎn)化效果還是可以的。

至于代碼塊中的內(nèi)容在word里顯示不佳,但是單獨(dú)把word中代碼塊的內(nèi)容拿出來(lái)放到txt,或者其他代碼塊中格式確實(shí)正常的

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False 
df = pd.read_csv('E:\\pycharm_workspace\\數(shù)據(jù)集\\salaries.csv')

六、完整代碼

package com.example.utils;

import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.util.ast.Document;
import com.vladsch.flexmark.util.data.MutableDataSet;
import org.docx4j.Docx4J;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Entities;

import java.io.*;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;

public class MarkdownToWordConverter {

    /**
     * 將 Markdown 內(nèi)容轉(zhuǎn)換為 Word 文檔
     * @param markdownContent Markdown 內(nèi)容
     * @param outputFilePath 輸出的 Word 文檔路徑
     * @throws Exception 轉(zhuǎn)換過(guò)程中可能出現(xiàn)的異常
     */
    public static void convertMarkdownToWord(String markdownContent, String outputFilePath) throws Exception {
        // 將 Markdown 轉(zhuǎn)換為 HTML
        String htmlContent = convertMarkdownToHtml(markdownContent);

        // 使用 Jsoup 規(guī)范化 HTML 內(nèi)容
        // 使用全限定類(lèi)名
        org.jsoup.nodes.Document jsoupDoc = Jsoup.parse(htmlContent);
        jsoupDoc.outputSettings().syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml);
        jsoupDoc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);
        htmlContent = jsoupDoc.html();

        // 清理多余的空行和字符
        htmlContent = htmlContent.replaceAll("(?m)^[ \t]*\r?\n", "");

        // 創(chuàng)建安全的 XMLReader
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
        factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        XMLReader xmlReader = factory.newSAXParser().getXMLReader();

        // 創(chuàng)建 Word 文檔包
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();

        // 設(shè)置 XHTML 導(dǎo)入器
        XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);

        // 將 HTML 內(nèi)容導(dǎo)入到 Word 文檔中
        Body body = mainDocumentPart.getJaxbElement().getBody();
        body.getContent().addAll(XHTMLImporter.convert(htmlContent, null));

        // 保存 Word 文檔
        Docx4J.save(wordMLPackage, new File(outputFilePath), Docx4J.FLAG_NONE);
    }

    /**
     * 將 Markdown 內(nèi)容轉(zhuǎn)換為 HTML 內(nèi)容
     * @param markdownContent Markdown 內(nèi)容
     * @return 轉(zhuǎn)換后的 HTML 內(nèi)容
     */
    private static String convertMarkdownToHtml(String markdownContent) {
        MutableDataSet options = new MutableDataSet();

        // 創(chuàng)建 Markdown 解析器和 HTML 渲染器
        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();

        // 解析 Markdown 內(nèi)容
        Document document = parser.parse(markdownContent);

        // 渲染為 HTML 內(nèi)容
        return renderer.render(document);
    }

    /**
     * 從文件中讀取 Markdown 內(nèi)容
     * @param filePath Markdown 文件路徑
     * @return Markdown 內(nèi)容
     * @throws IOException 讀取文件時(shí)可能出現(xiàn)的異常
     */
    public static String readMarkdownFromFile(String filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append("\n");
            }
        }
        return content.toString();
    }

    public static void main(String[] args) {
        String markdownFilePath = "C:\\Users\\admin\\Desktop\\salaries.md";
        String outputWordFilePath = "C:\\Users\\admin\\Desktop\\file.docx";

        try {
            // 讀取 Markdown 文件內(nèi)容
            String markdownContent = readMarkdownFromFile(markdownFilePath);

            // 將 Markdown 內(nèi)容轉(zhuǎn)換為 Word 文檔
            convertMarkdownToWord(markdownContent, outputWordFilePath);

            System.out.println("Markdown 轉(zhuǎn)換為 Word 文檔成功!");
        } catch (Exception e) {
            System.err.println("轉(zhuǎn)換過(guò)程中出現(xiàn)錯(cuò)誤: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

七、也可以順便把html文件輸出出來(lái)

package com.example.utils;

import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.util.ast.Document;
import com.vladsch.flexmark.util.data.MutableDataSet;
import org.docx4j.Docx4J;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Entities;

import java.io.*;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;

public class MarkdownToWordConverter {

    /**
     * 將 Markdown 內(nèi)容轉(zhuǎn)換為 Word 文檔,并輸出 HTML 文件
     * @param markdownContent Markdown 內(nèi)容
     * @param outputWordFilePath 輸出的 Word 文檔路徑
     * @param outputHtmlFilePath 輸出的 HTML 文件路徑
     * @throws Exception 轉(zhuǎn)換過(guò)程中可能出現(xiàn)的異常
     */
    public static void convertMarkdownToWord(String markdownContent, String outputWordFilePath, String outputHtmlFilePath) throws Exception {
        // 將 Markdown 轉(zhuǎn)換為 HTML
        String htmlContent = convertMarkdownToHtml(markdownContent);

        // 使用 Jsoup 規(guī)范化 HTML 內(nèi)容
        org.jsoup.nodes.Document jsoupDoc = Jsoup.parse(htmlContent);
        jsoupDoc.outputSettings().syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml);
        jsoupDoc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);
        htmlContent = jsoupDoc.html();

        // 清理多余的空行和字符
        htmlContent = htmlContent.replaceAll("(?m)^[ \t]*\r?\n", "");

        // 輸出 HTML 文件
        try (FileWriter writer = new FileWriter(outputHtmlFilePath)) {
            writer.write(htmlContent);
        }

        // 創(chuàng)建安全的 XMLReader
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
        factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        XMLReader xmlReader = factory.newSAXParser().getXMLReader();

        // 創(chuàng)建 Word 文檔包
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();

        // 設(shè)置 XHTML 導(dǎo)入器
        XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);

        // 將 HTML 內(nèi)容導(dǎo)入到 Word 文檔中
        Body body = mainDocumentPart.getJaxbElement().getBody();
        body.getContent().addAll(XHTMLImporter.convert(htmlContent, null));

        // 保存 Word 文檔
        Docx4J.save(wordMLPackage, new File(outputWordFilePath), Docx4J.FLAG_NONE);
    }

    /**
     * 將 Markdown 內(nèi)容轉(zhuǎn)換為 HTML 內(nèi)容
     * @param markdownContent Markdown 內(nèi)容
     * @return 轉(zhuǎn)換后的 HTML 內(nèi)容
     */
    private static String convertMarkdownToHtml(String markdownContent) {
        MutableDataSet options = new MutableDataSet();

        // 創(chuàng)建 Markdown 解析器和 HTML 渲染器
        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();

        // 解析 Markdown 內(nèi)容
        Document document = parser.parse(markdownContent);

        // 渲染為 HTML 內(nèi)容
        return renderer.render(document);
    }

    /**
     * 從文件中讀取 Markdown 內(nèi)容
     * @param filePath Markdown 文件路徑
     * @return Markdown 內(nèi)容
     * @throws IOException 讀取文件時(shí)可能出現(xiàn)的異常
     */
    public static String readMarkdownFromFile(String filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append("\n");
            }
        }
        return content.toString();
    }

    public static void main(String[] args) {
        String markdownFilePath = "C:\\Users\\admin\\Desktop\\markdown文件\\salaries.md";
        String outputWordFilePath = "C:\\Users\\admin\\Desktop\\markdown文件\\file.docx";
        String outputHtmlFilePath = "C:\\Users\\admin\\Desktop\\markdown文件\\file.html";

        try {
            // 讀取 Markdown 文件內(nèi)容
            String markdownContent = readMarkdownFromFile(markdownFilePath);

            // 將 Markdown 內(nèi)容轉(zhuǎn)換為 Word 文檔,并輸出 HTML 文件
            convertMarkdownToWord(markdownContent, outputWordFilePath, outputHtmlFilePath);

            System.out.println("Markdown 轉(zhuǎn)換為 Word 文檔和 HTML 文件成功!");
        } catch (Exception e) {
            System.err.println("轉(zhuǎn)換過(guò)程中出現(xiàn)錯(cuò)誤: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

以上就是基于Java開(kāi)發(fā)一個(gè)Markdown到Word文檔轉(zhuǎn)換工具的詳細(xì)內(nèi)容,更多關(guān)于Java Markdown到Word轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud?@RefreshScope刷新機(jī)制淺析

    SpringCloud?@RefreshScope刷新機(jī)制淺析

    RefeshScope這個(gè)注解想必大家都用過(guò),在微服務(wù)配置中心的場(chǎng)景下經(jīng)常出現(xiàn),他可以用來(lái)刷新Bean中的屬性配置,那大家對(duì)他的實(shí)現(xiàn)原理了解嗎?它為什么可以做到動(dòng)態(tài)刷新呢
    2023-03-03
  • Spring Data分頁(yè)與排序的實(shí)現(xiàn)方法

    Spring Data分頁(yè)與排序的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Spring Data分頁(yè)與排序的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程)

    IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程)

    這篇文章主要介紹了IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • SpringBoot中注解@ConfigurationProperties與@Value的區(qū)別與使用詳解

    SpringBoot中注解@ConfigurationProperties與@Value的區(qū)別與使用詳解

    本文主要介紹了SpringBoot中注解@ConfigurationProperties與@Value的區(qū)別與使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • MyBatis-Plus代碼生成器的使用詳解

    MyBatis-Plus代碼生成器的使用詳解

    這篇文章主要介紹了MyBatis-Plus代碼生成器的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 利用Java寫(xiě)一個(gè)學(xué)生管理系統(tǒng)

    利用Java寫(xiě)一個(gè)學(xué)生管理系統(tǒng)

    今天這篇文章就給給大家分享利用Java寫(xiě)一個(gè)學(xué)生管理系統(tǒng)吧,先寫(xiě)一個(gè)簡(jiǎn)單的用List來(lái)實(shí)現(xiàn)學(xué)生管理系統(tǒng):
    2021-09-09
  • 基于spring@aspect注解的aop實(shí)現(xiàn)過(guò)程代碼實(shí)例

    基于spring@aspect注解的aop實(shí)現(xiàn)過(guò)程代碼實(shí)例

    這篇文章主要介紹了基于spring@aspect注解的aop實(shí)現(xiàn)過(guò)程代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 關(guān)于JFormDesigner的安裝及破姐超詳細(xì)教程

    關(guān)于JFormDesigner的安裝及破姐超詳細(xì)教程

    JFormDesigner是一種先進(jìn)的圖形用戶界面Swing?的設(shè)計(jì)工具(非開(kāi)源),具有一個(gè)獨(dú)立的開(kāi)發(fā)工具產(chǎn)品和基于不同開(kāi)發(fā)工具如Eclipse、NetBeans等的開(kāi)發(fā)插件,本文給大家介紹JFormDesigner安裝破解教程,感興趣的朋友一起看看吧
    2023-12-12
  • Java包裝類(lèi)原理與用法實(shí)例分析

    Java包裝類(lèi)原理與用法實(shí)例分析

    這篇文章主要介紹了Java包裝類(lèi),結(jié)合實(shí)例形式分析了Java包裝類(lèi)基本概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • Java Hibernate使用方法及整合查詢

    Java Hibernate使用方法及整合查詢

    這篇文章主要介紹了Java使用與整合Hibernate,在正式進(jìn)入Hibernate的高級(jí)應(yīng)用之前,需要了解聲明是數(shù)據(jù)模型與領(lǐng)域模型,這兩個(gè)概念將會(huì)幫助我們更好的理解實(shí)體對(duì)象的關(guān)聯(lián)關(guān)系映射
    2023-04-04

最新評(píng)論