SpringBoot入门

【SpringBoot】入门到精通 这一篇就够了 想学习Springboot看一篇就够了 阅读详情

springboot

先来说说什么是springboot,简单粗暴地来说,它是一个简化Spring应用开发的框架; 意在简化新Spring应用的初始搭建以及开发过程

特点

1. 创建独立的Spring应用程序

2. 嵌入的Tomcat,无需部署WAR文件

3. 简化Maven配置

4. 自动配置Spring

......

环境约束

–jdk1.8:Spring Boot 推荐jdk1.7及以上;java version "1.8.0_112"
–maven3.x:maven 3.3以上版本;Apache Maven 3.3.9 

创建一个springboot

1、创建一个maven工程;(jar)

2、导入spring boot相关的依赖 

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependencies>


 
3、编写一个主程序;启动Spring Boot应用 
    

@SpringBootApplication
public class SpringbootJpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootJpaApplication.class, args);
    }
}


 
4、编写相关的Controller、Service 
 
  5、运行主程序测试

6、简化部署 

 <!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring‐boot‐maven‐plugin</artifactId>
        </plugin>
    </plugins>
</build>


将这个应用打成jar包,直接使用java -jar的命令进行执行;

Hello World探究 

 /**  *  @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用  */ 
@SpringBootApplication
public class HelloWorldMainApplication {
     public static void main(String[] args) {
           
        // Spring应用启动起来
        SpringApplication.run(HelloWorldMainApplication.class,args);
    } 
}

@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;

@SpringBootConfiguration:Spring Boot的配置类;
  标注在某个类上,表示这是一个Spring Boot的配置类;
 
@Configuration:配置类上来标注这个注解;
  配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component


@EnableAutoConfiguration:开启自动配置功能;
  以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自 动配置功能;这样自动配置才能生效;

@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):
 Spring的底层注解@Import,给容器中导入一个组件;导入的组件由 AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@Import(EnableAutoConfigurationImportSelector.class);
给容器中导入组件?
  EnableAutoConfigurationImportSelector:导入哪些组件的选择器;
  将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
  会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件, 并配置好这些组件;

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;
 
 SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
 Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将 这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东 西,自动配置类都帮我们;
 

SpringBoot 快速入门(保姆级详细教程) SpringBoot快速入门,保姆级别超详细,解决IDEA创建SpringBoot项目一直转圈圈。 阅读详情

相关推荐

01.springboot快速入门

文章目录1. SpringBoot Quick Start1.1. springboot依赖1.2. 编写SpringBoot引导类1.3. 编写Controller1.4. 测试2. 快速入门解析2.1. 注解解析2.2. SpringBoot工程热部署2.3. 起步依赖分析2.3.1. 分析spring-boot-starter-parent2.3.2. 分析spring-boot-start...

gunhunti4524的博客 415

重走springboot(二)

注:本文内容来源于微信公众号:狂神说 一.整合jdbc 1、我去新建一个项目测试:springboot-data-jdbc ; 引入相应的模块!基础模块 2、项目建好之后,发现自动帮我们导入了如下的启动器: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i

Pig-pig-pig的博客 433

鸿蒙手机卸载内置应用 adb连接

**傻瓜式删除鸿蒙系统内置应用,自己亲测有效。**

JJDXBT的博客 3万+

springboot整合Druid

springboot2整合Druid

pi_xiu_za_le的博客 1283

pytorch gpu运行安装重点(CUDA12.3)

pytorch gpu加速

weixin_45597212的博客 3万+

宜搭子表单(自定义页面全部展示)

效果:增加自定义页面添加表格组件,配置数据源变量: formUuid'表单编码'变量: pageSize10变量: currentPage1。

2301_80286061的博客 2277

自动配置@EnableAutoConfiguration

在spring中有很多Enable开头的注解,作用就是@Import来收集并注册特定的场景相关的bean,并且加入到IOC容器。 @EnableAutoConfiguration就是借助@Import来收集所有符合自动配置条件的bean定义,并加载到IOC容器中。 在这里可能会好奇的是为什么@SpringBootApplication必须跟业务包放在同一级路劲上,这里需要了解的一个注解是:@AutoConfigurationPackage 在Registrar.class类中 .

joy_tom的博客 4511

通信原理与MATLAB(八):2PSK的调制解调

通信原理和MATLAB

菜yuan~的博客 3万+

enableautoconfiguration_深入理解EnableAutoConfiguration原理

文章来源:https://my.oschina.net/lt0314/blog/4335365源码分析@EnableAutoConfiguration在SpringBoot中的加载和实例化过程万里长征第一步,我们先理解下什么是EnableAutoConfiguration?什么是EnableAutoConfiguration注解?在哪?org.springframework.boot.a...

weixin_39519619的博客 573

YOLO26全新改进 | 最全损失函数改进篇 | SIoU 、WIoU、GIoU、DIoU、EIOU、CIoU, InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数

🔥本文详细介绍了如何修改YOLO26中的损失函数。首先提供了完整的损失函数核心代码,包括WIoU_Scale类和各种IoU计算方法。然后分三步指导修改:1)替换metrics.py中的bbox_iou方法;2)修改loss.py中的iou计算代码;3)更新tal.py中的相关代码。文中特别强调了修改损失函数应在模型结构调整后使用,并提供了多种IoU损失函数的参数配置建议,包括SIoU、WIoU、GIoU等,可根据实际需求灵活选择搭配使用。

Ai缝合怪、助力小伙伴高效发论文 450

uni-app 实现高德 / 百度 / 腾讯地图多端导航跳转(H5最全方案)

本文介绍了一套生产级可复用的多地图导航Hook封装方案。针对开发中常见的经纬度顺序混乱、中文乱码、参数不统一等问题,提供了统一解决方案。方案支持高德、百度、腾讯三大地图平台,封装了各平台的URI参数处理逻辑,包括坐标顺序转换、名称编码、导航模式适配等核心功能。通过组合式API设计,开发者只需调用统一入口即可实现多地图导航跳转,同时保留单独调用各平台的能力。文中还总结了6大常见坑点,并推荐默认使用高德地图作为最稳定的导航方案。该方案适用于车辆定位、物流配送等多种业务场景,可封装为可复用的Hooks组件。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 537

解析SpringBoot中的starter原理

SpringBoot其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,提供自动配置的“starter”项目对象模型以简化Maven配置。 本文重点分析springboot利用starter把关键类加载到spring容器中的过程,希望通过一步步分析使大家能够更好的理解其中的原理。 ...

自律使我自由 3305

YOLO26涨点改进 | NeurIPS2025最佳论文!注意力改进篇| 引入Gated Attention门控注意力模块、太牛了!直接拯救了大模型的发展,助力目标检测、图像分割、图像分类有效涨点

本文提出了一种基于门控注意力机制(GatedAttention)的YOLO26模型改进方法。该方法在标准softmax注意力机制中引入头部特定的sigmoid门控,通过增强注意力机制使模型更聚焦于关键信息。实验表明,该模块能显著提升模型性能,特别是在复杂背景和密集目标场景中,同时减少无关区域关注并提高检测精度。门控机制引入的非线性和稀疏性不仅提升了推理效率,还改善了训练稳定性,使模型能采用更大学习率并增强扩展性。此外,该方法有效缓解了"注意力下沉"现象,增强了模型对长距离目标的感知能力。

Ai缝合怪、助力小伙伴高效发论文 653

SpringBoot 入门笔记

为什么要学SpringBoot?因为配置Spring程序(XML、注解、Java配置类、混合用法…)很复杂,很麻烦!SpringBoot可以帮我们干嘛?SpringBoot 能帮我们地创建一个独立的、生产级别的。大多数 SpringBoot 应用只需要编写即Spring 平台以及第三方技术.

weixin_51118573的博客 970

RK3568平台(网络篇)添加网络交换芯片RTL8306M

该交换芯片支持I2C、SPI、mdio通信,但是看ast1520的uboot代码采用的是mdio去通信phy芯片的,所以暂时也先采用mdio的方式,需要配置相应的引脚才可以配置成mdio通信模式,具体的配置硬件工程师解决。RTL8306M芯片上可能没有提供MDC/MDIO接口,可以通过GPIO(General Purpose Input/Output)来模拟,GPIO可实现串行输入输出,且一般CPU上会提供很多GPIO接口供用户自定义使用。

weixin_49303682的博客 3935

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

boot入门思想 spring_SpringBoot简单入门

SpringBoot基础学习目标:能够理解Spring的优缺点能够理解SpringBoot的特点能够理解SpringBoot的核心功能能够搭建SpringBoot的环境能够完成application.properties配置文件的配置能够完成application.yml配置文件的配置能够使用SpringBoot集成Mybatis能够使用SpringBoot集成Junit能够使用SpringBoo...

weixin_39808877的博客 155

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Springboot - 入门案例

SpringBoot - 入门程序 - 实现Hello SpringBoot

chrismurphy的博客 308

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SpringBoot之入门

SpringBoot之入门一、SpringBoot简介1.1 什么是SpringBoot1.2 为什么学习SpringBoot1.3 SpringBoot的特点二、入门案例2.1 新建Maven项目2.2 添加依赖2.3 启动类2.4 编写Controller2.5 启动项目三、全注解配置和属性注入3.1 使用java配置来尝试实现连接池配置3.1.1 引入连接池依赖3.1.2 创建jdbc.properties文件3.1.3 编写配置类3.1.4 在HelloController测试3.1.5 debu

weixin_43915128的博客 369

spring boot 入门_SpringBoot 搭建入门程序

本节获得技能快速搭建SpriingBoot入门程序本教程对应的免费视频教学地址 SpringBoot从入门到精通 SSM/MyBatis/Redis/KafKa/SpringCloud​ke.qq.com知识要点程序核心步骤如下第一步 新增 spring-boot-starter-parent依赖第二步 新增 spring-boot-starter-web 依赖第三步 使用@SpringBootA...

weixin_39719727的博客 124

SpringBoot-入门

Spring Boot它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

oyang的博客 1476

springboot快速入门

springboot快速入门快速入门两种方式开发环境https://start.spring.io/构建使用maven构建 快速入门两种方式 1.访问官网https://start.spring.io/构建 2.使用maven构建 开发环境 jdk:jdk1.8.0_212 maven:apache-maven-3.6.2 springboot版本:2.2.0 https://start.sp...

write less , do more 1万+

SpringBoot最详细的入门讲解——spring-boot入门(一)—— 工具准备

SpringBoot入门——工具准备 SpringBoot最详细的入门教程 一、开发工具 1.编程工具——idea 链接:https://pan.baidu.com/s/1KJcl1fhSlzjhpkmqhYQREQ 提取码:yrme 这里我提供2017版本,下载安装后使用 2.依赖工具——maven 链接:https://pan.baidu.com/s/16tm1uZPEuOIogsYXriBC...

yb970521的博客 5585

SpringBoot(3)——SpringBoot入门程序及解析

会给容器中导入非常多的自动配置类(xxxAutoConfiguration);(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器。@Import 是 Spring 框架里用于在配置类中导入其他配置类、组件类或者实现了特定接口的类的注解。Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,配置类 ----- 配置文件;配置类也是容器中的一个组件;标注在某个类上,表示这是一个Spring Boot的配置类;

2301_78566776的博客 1559

[SpringBoot]入门案例

创建好的项目会自动生成其他的一些文件,而这些文件目前对我们来说没有任何作用,所以可以将这些文件删除。我们在启动服务器时就是执行的该类中的主方法。程序开发可以看到,前三步都是在搭建环境,而且这三步基本都是固定的。经过以上步骤后就创建了如下结构的模块,它会帮我们自动生成一个。的配置类不能缺少,而这个配置类还是比较麻烦的,代码如下。进行开发,使整个开发变得很简单,那它是如何做到的呢?这个类中的东西很简单,就在类上添加了一个。的开发步骤后,接下来我们进行具体的操作。开发的,那我们就先回顾一下,以。.........

十八岁讨厌编程的博客 695
上一篇: 蓝桥杯——数独
下一篇: 对比两张excel的不同
PI_PIBOY
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值