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

AgentScope?Java?入門到進(jìn)階指南

 更新時(shí)間:2026年04月16日 09:19:55   作者:plant197  
AgentScopeJava是一個(gè)面向智能體的編程框架,用于構(gòu)建基于大語(yǔ)言模型的應(yīng)用,它提供了智能體所需功能,本文給大家介紹AgentScope?Java?入門到進(jìn)階,感興趣的朋友一起看看吧

一、什么是 AgentScope Java?

AgentScope Java 是一個(gè)面向智能體的編程框架,用于構(gòu)建基于大語(yǔ)言模型(LLM)的應(yīng)用。它提供了構(gòu)建智能體所需的一切功能:ReAct 推理、工具調(diào)用、記憶管理、多智能體協(xié)作等,讓你能夠快速開(kāi)發(fā)生產(chǎn)級(jí)的 AI 智能體應(yīng)用。

二、環(huán)境準(zhǔn)備

1. 系統(tǒng)要求

  • JDK 17 或更高版本
  • Maven 或 Gradle 構(gòu)建工具

2. 添加依賴

在你的 pom.xml 中添加以下依賴:

<dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope</artifactId>
    <version>1.0.1</version>
</dependency>

三、快速入門:創(chuàng)建第一個(gè)智能體

1. 最簡(jiǎn)單的智能體示例

下面是一個(gè)基礎(chǔ)的智能體示例,它可以響應(yīng)用戶的問(wèn)候:

import io.agentscope.core.ReActAgent;
import io.agentscope.core.message.Msg;
import io.agentscope.core.model.DashScopeChatModel;
public class FirstAgentExample {
    public static void main(String[] args) {
        // 獲取API密鑰(實(shí)際開(kāi)發(fā)中建議使用環(huán)境變量)
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 創(chuàng)建智能體
        ReActAgent agent = ReActAgent.builder()
            .name("MyFirstAgent")
            .sysPrompt("你是一個(gè)友好的AI助手,總是用簡(jiǎn)潔的語(yǔ)言回答問(wèn)題。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-plus")
                .build())
            .build();
            // 發(fā)送消息并獲取響應(yīng)
        Msg userMessage = Msg.builder()
                .name("User")  // 設(shè)置發(fā)送者名稱
                .role(MsgRole.USER)  // 指定角色為用戶
                .content(TextBlock.builder()
                        .text("你好,我叫小明,很高興認(rèn)識(shí)你!")  // 設(shè)置消息內(nèi)容
                        .build())
                .build();    
        // 發(fā)送消息并獲取響應(yīng)
        Msg response = agent.call(userMessage).block();
        // 輸出響應(yīng)
        assert response != null;
        System.out.println("智能體回復(fù):" + response.getTextContent());
    }
}

2. 代碼解釋

  • ReActAgent.builder():使用建造者模式創(chuàng)建智能體
  • name():設(shè)置智能體名稱
  • sysPrompt():設(shè)置系統(tǒng)提示,定義智能體的角色和行為
  • model():配置底層LLM模型,這里使用了阿里云的DashScope服務(wù)
  • agent.call():發(fā)送消息給智能體并獲取響應(yīng)

四、基礎(chǔ)功能:智能體與工具

1. 創(chuàng)建自定義工具

工具是智能體與外部世界交互的橋梁。下面創(chuàng)建一個(gè)簡(jiǎn)單的計(jì)算器工具:

import io.agentscope.core.tool.Tool;
import io.agentscope.core.tool.ToolParam;
import reactor.core.publisher.Mono;
public class CalculatorTool {
    @Tool(name = "calculator", description = "進(jìn)行數(shù)學(xué)計(jì)算,支持加減乘除")
    public Mono<String> calculate(
        @ToolParam(name = "expression", description = "數(shù)學(xué)表達(dá)式,如1+2*3") String expression
    ) {
        try {
            // 簡(jiǎn)單的表達(dá)式計(jì)算邏輯
            double result = evaluateExpression(expression);
            return Mono.just(expression + " = " + result);
        } catch (Exception e) {
            return Mono.just("計(jì)算錯(cuò)誤: " + e.getMessage());
        }
    }
    private double evaluateExpression(String expr) {
        // 實(shí)際項(xiàng)目中可以使用更完善的表達(dá)式解析庫(kù)
        expr = expr.replaceAll("\\s+", "");
        // 簡(jiǎn)化實(shí)現(xiàn),僅處理加減乘除
        // ... 實(shí)現(xiàn)計(jì)算邏輯 ...
        return 0; // 實(shí)際計(jì)算結(jié)果
    }
}

2. 在智能體中使用工具

import io.agentscope.core.ReActAgent;
import io.agentscope.core.tool.Toolkit;
public class AgentWithToolExample {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 創(chuàng)建工具集并注冊(cè)工具
        Toolkit toolkit = new Toolkit();
        toolkit.registerTool(new CalculatorTool());
        // 創(chuàng)建帶工具的智能體
        ReActAgent agent = ReActAgent.builder()
            .name("CalculatorAgent")
            .sysPrompt("你是一個(gè)計(jì)算器助手,當(dāng)需要進(jìn)行數(shù)學(xué)計(jì)算時(shí),使用calculator工具。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-plus")
                .build())
            .toolkit(toolkit) // 配置工具集
            .build();
       Msg userMessage = Msg.builder()
                .name("User")  // 設(shè)置發(fā)送者名稱
                .role(MsgRole.USER)  // 指定角色為用戶
                .content(TextBlock.builder()
                        .text("請(qǐng)計(jì)算:(25 + 75) * 3 / 2")  // 設(shè)置消息內(nèi)容
                        .build())
                .build();
        // 測(cè)試計(jì)算功能
        Msg response = agent.call(userMessage).block();
        assert response != null;
        System.out.println("計(jì)算結(jié)果:" + response.getTextContent());
    }
}

五、進(jìn)階功能:多智能體協(xié)作

1. 順序管道(Sequential Pipeline)

順序管道讓多個(gè)智能體按順序處理任務(wù),前一個(gè)智能體的輸出作為后一個(gè)的輸入:

import io.agentscope.core.pipeline.SequentialPipeline;
import io.agentscope.core.ReActAgent;
import io.agentscope.core.message.Msg;
public class SequentialPipelineExample {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 創(chuàng)建三個(gè)不同功能的智能體
        ReActAgent translator = createTranslator(apiKey);
        ReActAgent summarizer = createSummarizer(apiKey);
        ReActAgent sentimentAnalyzer = createSentimentAnalyzer(apiKey);
        // 構(gòu)建順序管道
        SequentialPipeline pipeline = SequentialPipeline.builder()
            .addAgent(translator)
            .addAgent(summarizer)
            .addAgent(sentimentAnalyzer)
            .build();
        // 輸入文本
        String inputText = "Artificial Intelligence has revolutionized the technology industry...";
        Msg userMessage = Msg.builder()
        .name("User")  // 設(shè)置發(fā)送者名稱
        .role(MsgRole.USER)  // 指定角色為用戶
        .content(TextBlock.builder()
                .text(inputText)  // 設(shè)置消息內(nèi)容
                .build())
        .build();
        // 執(zhí)行管道
        Msg result = pipeline.execute(userMessage).block();
        // 輸出最終結(jié)果
        System.out.println("最終分析結(jié)果:" + result.getTextContent());
    }
    // 創(chuàng)建翻譯智能體
    private static ReActAgent createTranslator(String apiKey) {
        return ReActAgent.builder()
            .name("Translator")
            .sysPrompt("將輸入的英文文本準(zhǔn)確翻譯成中文,只輸出翻譯結(jié)果。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-plus")
                .build())
            .build();
    }
    // 創(chuàng)建摘要智能體
    private static ReActAgent createSummarizer(String apiKey) {
        return ReActAgent.builder()
            .name("Summarizer")
            .sysPrompt("將輸入文本總結(jié)為2-3句話,保留核心信息。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-plus")
                .build())
            .build();
    }
    // 創(chuàng)建情感分析智能體
    private static ReActAgent createSentimentAnalyzer(String apiKey) {
        return ReActAgent.builder()
            .name("SentimentAnalyzer")
            .sysPrompt("分析輸入文本的情感傾向,分為積極、消極、中性或混合。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-plus")
                .build())
            .build();
    }
}

2. 并行管道(Fanout Pipeline)

并行管道讓多個(gè)智能體同時(shí)處理同一輸入,適用于需要多視角分析的場(chǎng)景:

import io.agentscope.core.pipeline.FanoutPipeline;
import io.agentscope.core.ReActAgent;
import io.agentscope.core.message.Msg;
import java.util.List;
public class FanoutPipelineExample {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 創(chuàng)建三個(gè)專家智能體
        ReActAgent techExpert = createTechExpert(apiKey);
        ReActAgent uxExpert = createUXExpert(apiKey);
        ReActAgent bizAnalyst = createBusinessAnalyst(apiKey);
        // 構(gòu)建并行管道
        FanoutPipeline pipeline = FanoutPipeline.builder()
            .addAgent(techExpert)
            .addAgent(uxExpert)
            .addAgent(bizAnalyst)
            .concurrent() // 并行執(zhí)行
            .build();
        // 產(chǎn)品創(chuàng)意
        String productIdea = "一個(gè)使用AI分析日常照片并自動(dòng)生成個(gè)性化視頻日記的移動(dòng)應(yīng)用...";
        Msg userMessage = Msg.builder()
                .name("User")  // 設(shè)置發(fā)送者名稱
                .role(MsgRole.USER)  // 指定角色為用戶
                .content(TextBlock.builder()
                        .text(productIdea)  // 設(shè)置消息內(nèi)容
                        .build())
                .build();
        // 執(zhí)行管道
        List<Msg> results = pipeline.execute(userMessage).block();
        // 輸出結(jié)果
        for (Msg result : results) {
            System.out.println("=== " + result.getName() + " 分析 ===");
            System.out.println(result.getTextContent() + "\n");
        }
    }
    // 創(chuàng)建技術(shù)專家智能體
    private static ReActAgent createTechExpert(String apiKey) {
        // 實(shí)現(xiàn)與前面類似
        // ...
    }
    // 創(chuàng)建UX專家智能體
    private static ReActAgent createUXExpert(String apiKey) {
        // 實(shí)現(xiàn)與前面類似
        // ...
    }
    // 創(chuàng)建業(yè)務(wù)分析師智能體
    private static ReActAgent createBusinessAnalyst(String apiKey) {
        // 實(shí)現(xiàn)與前面類似
        // ...
    }
}

六、高級(jí)功能:計(jì)劃與記憶

1. 使用 PlanNotebook 進(jìn)行任務(wù)規(guī)劃

FileTool:操作文件的工具

/**
 * 這是一個(gè)文件工具類,用于處理文件相關(guān)的功能
 */
public class FileTool {
    /**
     * 讀取文件內(nèi)容
     */
    @Tool(name = "readFile", description = "讀取指定文件的內(nèi)容")
    public String readFile(@ToolParam(name = "filePath", description = "文件路徑") String filePath) {
        try {
            Path path = Paths.get(filePath);
            // 使用BufferedReader進(jìn)行緩沖讀取,提高大文件讀取效率
            StringBuilder content = new StringBuilder();
            try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
                String line;
                while ((line = reader.readLine()) != null) {
                    content.append(line).append(System.lineSeparator());
                }
            }
            return content.toString();
        } catch (IOException e) {
            return "讀取文件失敗: " + e.getMessage();
        }
    }
    /**
     * 寫入文件內(nèi)容
     */
    @Tool(name = "writeFile", description = "寫入文件內(nèi)容")
    public String writeFile(@ToolParam(name = "filePath", description = "文件路徑") String filePath,
                            @ToolParam(name = "content", description = "文件內(nèi)容") String content) {
        try {
            Path path = Paths.get(filePath);
            // 確保父目錄存在
            if (path.getParent() != null && !Files.exists(path.getParent())) {
                Files.createDirectories(path.getParent());
            }
            // 使用BufferedWriter進(jìn)行緩沖寫入,提高寫入效率
            try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8, 
                    StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING)) {
                writer.write(content);
            }
            return "文件寫入成功";
        } catch (IOException e) {
            return "寫入文件失敗: " + e.getMessage();
        }
    }
}

PlanNotebook 幫助智能體分解復(fù)雜任務(wù)并跟蹤執(zhí)行進(jìn)度:

import io.agentscope.core.ReActAgent;
import io.agentscope.core.plan.PlanNotebook;
import io.agentscope.core.tool.Toolkit;
public class PlanNotebookExample {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 創(chuàng)建工具集
        Toolkit toolkit = new Toolkit();
        toolkit.registerTool(new FileTool());
        // 創(chuàng)建計(jì)劃筆記本
        PlanNotebook planNotebook = PlanNotebook.builder().build();
        // 創(chuàng)建帶計(jì)劃能力的智能體
        ReActAgent agent = ReActAgent.builder()
            .name("PlannerAgent")
            .sysPrompt("你是一個(gè)有條理的助手,對(duì)于多步驟任務(wù),先創(chuàng)建計(jì)劃再執(zhí)行。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-plus")
                .build())
            .toolkit(toolkit)
            .planNotebook(planNotebook) // 配置計(jì)劃筆記本
            .build();
        // 發(fā)送多步驟任務(wù)
        Msg userMessage = Msg.builder()
                .name("User")  // 設(shè)置發(fā)送者名稱
                .role(MsgRole.USER)  // 指定角色為用戶
                .content(TextBlock.builder()
                        .text(task)  // 設(shè)置消息內(nèi)容
                        .build())
                .build();
        Msg response = agent.call(userMessage).block();
        System.out.println("任務(wù)結(jié)果:" + response.getTextContent());
    }
}

2. 檢索增強(qiáng)生成(RAG)

RAG 技術(shù)讓智能體能夠利用外部知識(shí)庫(kù)回答問(wèn)題:

package org.example.agentScope.test;
import io.agentscope.core.ReActAgent;
import io.agentscope.core.message.Msg;
import io.agentscope.core.message.MsgRole;
import io.agentscope.core.message.TextBlock;
import io.agentscope.core.model.DashScopeChatModel;
import io.agentscope.core.rag.Knowledge;
import io.agentscope.core.rag.RAGMode;
import io.agentscope.core.rag.knowledge.SimpleKnowledge;
import io.agentscope.core.embedding.dashscope.DashScopeTextEmbedding;
import io.agentscope.core.rag.store.InMemoryStore;  
import io.agentscope.core.rag.model.Document;
import io.agentscope.core.rag.reader.ReaderInput;
import io.agentscope.core.rag.reader.SplitStrategy;
import io.agentscope.core.rag.reader.TextReader;
import java.util.List;
public class RAGExample {
    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        // 創(chuàng)建嵌入模型
        var embeddingModel = DashScopeTextEmbedding.builder()
            .apiKey(apiKey)
            .modelName("text-embedding-v3")
            .dimensions(1024)
            .build();
        // 創(chuàng)建向量存儲(chǔ)
        var vectorStore = InMemoryStore.builder().dimensions(1024).build();
        // 創(chuàng)建知識(shí)庫(kù)
        Knowledge knowledge = SimpleKnowledge.builder()
            .embeddingModel(embeddingModel)
            .embeddingStore(vectorStore)
            .build();
        // 向知識(shí)庫(kù)添加文檔
        addDocumentsToKnowledge(knowledge);
        // 創(chuàng)建帶RAG能力的智能體
        ReActAgent agent = ReActAgent.builder()
            .name("RAGAgent")
            .sysPrompt("你是一個(gè)知識(shí)豐富的助手,使用提供的知識(shí)庫(kù)回答問(wèn)題。")
            .model(DashScopeChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen-max")
                .build())
            .knowledge(knowledge) // 配置知識(shí)庫(kù)
            .ragMode(RAGMode.AGENTIC) // 智能體自主決定何時(shí)檢索
            .build();
        // 測(cè)試RAG功能
        // 快速創(chuàng)建用戶消息
        Msg userMsg = Msg.builder()
                .role(MsgRole.USER)  // 明確指定角色為用戶
                .content(TextBlock.builder()
                        .text("AgentScope有哪些核心功能?")  // 設(shè)置消息內(nèi)容
                        .build())
                .build();
        Msg response = agent.call(userMsg).block();
        System.out.println("回答:" + response.getTextContent());
    }
    private static void addDocumentsToKnowledge(Knowledge knowledge) {
        // 1. 創(chuàng)建文本閱讀器(設(shè)置分塊參數(shù):最大長(zhǎng)度512,按段落分割,重疊長(zhǎng)度50)
        TextReader reader = new TextReader(512, SplitStrategy.PARAGRAPH, 50);
        // 2. 準(zhǔn)備示例文檔內(nèi)容(可替換為實(shí)際文檔)
        String[] documentTexts = {
                "AgentScope 是一個(gè)多智能體框架,支持同步和異步通信," +
                        "提供統(tǒng)一的接口用于構(gòu)建和管理多智能體應(yīng)用??蚣苤С侄喾N智能體類型," +
                        "包括 ReActAgent 等實(shí)現(xiàn)了推理與行動(dòng)循環(huán)的智能體。",
                "RAG(檢索增強(qiáng)生成)技術(shù)通過(guò)從知識(shí)庫(kù)中檢索相關(guān)信息來(lái)增強(qiáng)語(yǔ)言模型的生成能力," +
                        "幫助模型獲取最新信息并減少幻覺(jué)。AgentScope 中的 RAG 模塊支持多種向量存儲(chǔ)," +
                        "包括內(nèi)存存儲(chǔ)和外部向量數(shù)據(jù)庫(kù)。"
        };
        // 3. 處理并添加每個(gè)文檔到知識(shí)庫(kù)
        for (String text : documentTexts) {
            try {
                // 將文本轉(zhuǎn)換為閱讀器輸入
                ReaderInput input = ReaderInput.fromString(text);
                // 讀取并分塊文檔(block() 用于同步獲取結(jié)果)
                List<Document> documents = reader.read(input).block();
                if (documents != null && !documents.isEmpty()) {
                    // 向知識(shí)庫(kù)添加文檔(block() 用于同步等待完成)
                    knowledge.addDocuments(documents).block();
                    System.out.println("成功添加文檔:" + text.substring(0, Math.min(50, text.length())) + "...");
                }
            } catch (Exception e) {
                System.err.println("添加文檔失?。? + e.getMessage());
            }
        }
    }
}

七、調(diào)試與監(jiān)控

AgentScope 提供了 Studio 工具用于可視化調(diào)試,但要安裝Studio ,詳情可查看
https://github.com/agentscope-ai/agentscope-studio

import io.agentscope.core.ReActAgent;
import io.agentscope.core.message.Msg;
import io.agentscope.core.model.DashScopeChatModel;
import io.agentscope.core.studio.StudioManager;
import io.agentscope.core.studio.StudioMessageHook;
import io.agentscope.core.studio.StudioUserAgent;
import java.util.List;
public class StudioDebugExample {
    public static void main(String[] args) {
        // 1. 初始化 Studio 連接(默認(rèn)端口 5173)
        StudioManager.init()
                .studioUrl("http://localhost:5173")  // Studio 服務(wù)地址
                .project("MyFirstProject")          // 項(xiàng)目名稱(用于分類調(diào)試記錄)
                .runName("debug_run_" + System.currentTimeMillis())  // 本次運(yùn)行名稱(建議唯一)
                .initialize()
                .block();  // 同步等待初始化完成
        try {
            // 2. 創(chuàng)建帶 Studio 鉤子的智能體(自動(dòng)上報(bào)消息)
            ReActAgent agent = ReActAgent.builder()
                    .name("Assistant")
                    .sysPrompt("你是一個(gè)調(diào)試助手")
                    .model(DashScopeChatModel.builder()  // 配置實(shí)際使用的模型
                            .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                            .modelName("qwen-plus")
                            .build())
                    .hooks(List.of(new StudioMessageHook(StudioManager.getClient())))  // 綁定 Studio 鉤子
                    .build();
            // 3. 創(chuàng)建 Studio 用戶代理(通過(guò) Web UI 輸入消息)
            StudioUserAgent user = StudioUserAgent.builder()
                    .name("User")
                    .studioClient(StudioManager.getClient())
                    .webSocketClient(StudioManager.getWebSocketClient())
                    .build();
            // 4. 運(yùn)行交互循環(huán)(通過(guò) Studio Web UI 輸入消息)
            Msg msg = null;
            while (true) {
                msg = user.call(msg).block();  // 等待 Web UI 輸入
                if (msg == null || "exit".equalsIgnoreCase(msg.getTextContent())) {
                    break;  // 輸入 exit 退出
                }
                msg = agent.call(msg).block();  // 智能體處理消息
            }
        } finally {
            // 5. 關(guān)閉 Studio 連接
            StudioManager.shutdown();
        }
    }
}

八、總結(jié)與進(jìn)階學(xué)習(xí)

通過(guò)本教程,你已經(jīng)了解了 AgentScope Java 的核心能:

  1. 基礎(chǔ)智能體創(chuàng)建與使用
  2. 工具開(kāi)發(fā)與集成
  3. 多智能體協(xié)作(順序與并行)
  4. 任務(wù)規(guī)劃與記憶管理
  5. 檢索增強(qiáng)生成(RAG)
  6. 調(diào)試與監(jiān)控

進(jìn)階學(xué)習(xí)資源

嘗試擴(kuò)展本教程中的示例,例如:

  • 創(chuàng)建更復(fù)雜的工具集成外部API
  • 構(gòu)建多智能體協(xié)作系統(tǒng)解決復(fù)雜問(wèn)題
  • 集成自己的知識(shí)庫(kù)實(shí)現(xiàn)領(lǐng)域?qū)<抑悄荏w

到此這篇關(guān)于AgentScope Java 入門到進(jìn)階的文章就介紹到這了,更多相關(guān)AgentScope Java 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java虛擬線程的超詳細(xì)講解

    java虛擬線程的超詳細(xì)講解

    虛擬線程是由Java運(yùn)行時(shí)而不是操作系統(tǒng)實(shí)現(xiàn)的Java線程,和傳統(tǒng)線程(或稱之為平臺(tái)線程)之間的主要區(qū)別在于,我們可以很容易地在同一個(gè)Java進(jìn)程中運(yùn)行大量活動(dòng)的虛擬線程,甚至數(shù)百萬(wàn)個(gè),這篇文章主要介紹了java虛擬線程的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • 用java生成html文件實(shí)現(xiàn)原理及代碼

    用java生成html文件實(shí)現(xiàn)原理及代碼

    用printStream來(lái)向html文件里輸出數(shù)據(jù),先創(chuàng)建一個(gè)StringBuilder對(duì)象,通過(guò)append方法來(lái)為其添加html語(yǔ)句,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-08-08
  • java中MultipartFile和File最簡(jiǎn)單的互相轉(zhuǎn)換示例

    java中MultipartFile和File最簡(jiǎn)單的互相轉(zhuǎn)換示例

    這篇文章主要給大家介紹了關(guān)于java中MultipartFile和File最簡(jiǎn)單的互相轉(zhuǎn)換的相關(guān)資料,MultipartFile和File都是Java中用于處理文件上傳的類,MultipartFile用于處理上傳的文件,File用于處理本地磁盤上的文件,需要的朋友可以參考下
    2023-09-09
  • springboot之集成mybatis-plus、druid整合多數(shù)據(jù)源實(shí)踐

    springboot之集成mybatis-plus、druid整合多數(shù)據(jù)源實(shí)踐

    本篇文章詳細(xì)介紹了如何在SpringBoot 2.3.12.RELEASE項(xiàng)目中配置MySQL 8.0數(shù)據(jù)庫(kù),包括pom文件依賴引入、application.yml配置、實(shí)體類與mapper層的創(chuàng)建及測(cè)試類的編寫,助力開(kāi)發(fā)者高效構(gòu)建數(shù)據(jù)庫(kù)連接
    2026-06-06
  • 使用Spring底層組件實(shí)現(xiàn)Aware接口

    使用Spring底層組件實(shí)現(xiàn)Aware接口

    這篇文章主要介紹了使用Spring底層組件實(shí)現(xiàn)Aware接口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java 如何優(yōu)雅的拋出業(yè)務(wù)異常

    Java 如何優(yōu)雅的拋出業(yè)務(wù)異常

    這篇文章主要介紹了Java 如何優(yōu)雅的拋出業(yè)務(wù)異常,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • spring?boot?實(shí)現(xiàn)一個(gè)?禁止重復(fù)請(qǐng)求的方法

    spring?boot?實(shí)現(xiàn)一個(gè)?禁止重復(fù)請(qǐng)求的方法

    這篇文章主要介紹了spring?boot?實(shí)現(xiàn)一個(gè)?禁止重復(fù)請(qǐng)求,當(dāng)重復(fù)請(qǐng)求該方法時(shí),會(huì)返回"Duplicate?request",避免重復(fù)執(zhí)行相同的操作,需要的朋友可以參考下
    2024-03-03
  • Spring前后端跨域請(qǐng)求設(shè)置代碼實(shí)例

    Spring前后端跨域請(qǐng)求設(shè)置代碼實(shí)例

    這篇文章主要介紹了Spring前后端跨域請(qǐng)求設(shè)置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java輸出多位小數(shù)的三種方法(附代碼)

    Java輸出多位小數(shù)的三種方法(附代碼)

    這篇文章主要給大家介紹了關(guān)于Java輸出多位小數(shù)的三種方法的相關(guān)資料,在實(shí)際工作中常常需要設(shè)定數(shù)字的輸出格式,如以百分比的形式輸出,或者設(shè)定小數(shù)位數(shù)等,需要的朋友可以參考下
    2023-07-07
  • Java中處理郵件附件的方法(本地文件和在線URL)

    Java中處理郵件附件的方法(本地文件和在線URL)

    這篇文章主要介紹了在Java中處理郵件附件的方法,針對(duì)本地文件和在線URL兩種附件來(lái)源,提供了兩種解決方案,并提供了下載文件和發(fā)送郵件的代碼示例,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

武邑县| 尼玛县| 新干县| 曲周县| 乌苏市| 凌源市| 淮安市| 仁化县| 竹北市| 蒲江县| 涿鹿县| 靖州| 沧源| 小金县| 榆树市| 乾安县| 慈溪市| 松潘县| 瓦房店市| 绥阳县| 乌鲁木齐县| 宁陕县| 乐平市| 上饶县| 体育| 余庆县| 南宫市| 文化| 临安市| 河北区| 虹口区| 腾冲县| 吉安市| 乾安县| 海盐县| 锡林浩特市| 色达县| 丰县| 汉川市| 和硕县| 桑植县|