SpringBoot 项目 @EnableWebMvc 和@EnableAutoConfiguration注解一些坑总结

SpringBoot自动配置原理深度解析:从@EnableAutoConfiguration到条件装配 自动配置是现代Java框架提升开发效率的核心机制,其本质是通过约定大于配置的理念,减少开发者的手动配置工作。其实现原理基于条件化Bean装配和运行时环境检测,通过扫描预定义的配置元数据,结合当前应用的类路径、已有Bean和属性设置,动态决定需要启用的功能模块。这一机制的技术价值在于大幅降低了项目的初始化和维护成本,保证了技术栈的一致性。在应用场景上,它广泛用于Web服务、数据访问、消息队列等模块的快速集成。本文聚焦于SpringBoot自动配置的实现细节,深入剖析了@EnableAutoConfigurat 阅读详情

关于springBoot项目中报错:

javax.servlet.ServletException: Could not resolve view with name 'xxx' in servlet with name 'dispatcherServlet',

有可能是因为如下使用方式造成的无法使用视图解析器,请自行排查。

 

使用方式结果
@EnableWebMvc + extends WebMvcConfigurationAdapter

× 会屏蔽@EnableAutoConfiguration注解

@EnableWebMvc + implements WebMvcConfigurer× 会屏蔽@EnableAutoConfiguration注解
extends WebMvcConfigurationSupport× 会屏蔽@EnableAutoConfiguration注解
extends DelegatingWebMvcConfiguration× 会屏蔽@EnableAutoConfiguration注解
extends WebMvcConfigurationAdapter(springBoot1.5以前,之后已废弃)√ 不会屏蔽@EnableAutoConfiguration注解

implements WebMvcConfigurer(springBoot2.0以后)

一些实现可以参考 WebMvcConfigurer接口配置实现自定义web 和 SpringBoot系列——WebMvcConfigurer介绍 及

精通SpringBoot——第三篇:详解WebMvcConfigurer接口 

√ 不会屏蔽@EnableAutoConfiguration注解

最后两句总结:

使用 @EnableWebMvc 注解,需要以编程的方式指定视图文件相关配置;

使用 @EnableAutoConfiguration 注解,会读取 application.properties 或 application.yml 文件中的配置。

 

超越数据手册:深入Zynq XADC的DRP接口与PL端自定义采样逻辑 本文深入探讨Zynq-7000系列XADC模块的DRP接口机制与PL端自定义采样逻辑实现。通过硬件级多通道轮询、触发采样和实时校准技术,突破传统软件驱动限制,为高精度电压测量和通讯应用提供极致灵活性和响应速度。 阅读详情

相关推荐

台积电技术研发实力

台积电技术研发实力 台积电在半导体行业的地位毋庸置疑。他们究竟有多强大,大部分读者了解得可能非常片面。从最新公布的2019年财报里,看看台积电的真正实力。 一、台积电在市场上的地位 根据公司财报,台积公司在先进制程技术、特殊制程技术,以及先进封装技术的发展上持续领先全球集成电路制造服务领域,2019年的市场占有率为52%。台积公司总体营收以地区划分(主要依据客户营运总部所在地),来自北美市场的营收占台积公司总体营收的60%、日本与中国大陆以外的亚太市场占9%、中国大陆市场占20%、欧洲、中东及非洲市场占6

吴建明wujianming_110117 1901

WebMvcAutoConfiguration

WebMvcAutoConfiguration 是Spring boot针对Web MVC的自动配置机制。 //表明是一个配置类 @Configuration(proxyBeanMethods = false) //必须是SERVLET类型才会启用,引入web依赖后,默认是SERVLET类型 @ConditionalOnWebApplication(type = Type.SERVLET) //必须有这三个类才会启用此配置类 @ConditionalOnClass({ Servlet.class, Disp

weixin_46666822的博客 2585

腾讯ACE反作弊系统:内核驱动与AI行为分析如何守护游戏公平

在游戏安全领域,反作弊技术是保障公平竞技环境的核心防线。其基本原理是通过监控系统关键行为,识别并阻断非法的第三方程序干预。从技术实现看,现代反作弊方案普遍采用分层防御架构,结合用户态模块进行应用层检测,并依赖内核态驱动实现底层深度监控,以此构建纵深防御体系。这种技术的核心价值在于,它能有效对抗从简单内存修改到高级驱动级作弊等多种威胁,维护游戏经济系统和玩家体验的完整性。随着作弊手段的演进,行为分析与AI赋能变得至关重要,系统通过机器学习模型分析进程行为序列的异常模式,即使面对未知特征的外挂变种也能进行有效识

weixin_33978578的博客 744

Spring MVC配置 EnableWebMvc,WebMvcConfigurationSupport,WebMvcAutoConfiguration

Spring MVC配置 @EnableWebMvc 声明 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented //注意这里 @Import(DelegatingWebMvcConfiguration.class) public @interface EnableWebMvc { } DelegatingWebMvcConfiguration是WebMvcConfigurationSupport的子类 注释 根

千里之行,始于足下 1261

【5G全网建设】Option3X和Option2模式建安市、兴城市和四水市核心网、承载网网络设计与部署

拓扑规划: Option 3X网络拓扑图规划 Option 2网络拓扑图规划 设备部署: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 数据配置: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 业务调试

weixin_67183034的博客 8858

保姆级教程:SAP ABAPer如何为VF01销售发票和MIRO发票校验配置凭证替代(含AC_DOCUMENT BADI完整代码示例)

本文详细解析了SAP ABAP中通过AC_DOCUMENT BADI实现VF01销售发票和MIRO发票校验的凭证替代技术。从技术选型到BADI实施步骤,再到核心逻辑代码示例,为ABAP开发者提供了一套完整的解决方案,帮助应对财务部门复杂的业务需求。

weixin_30421809的博客 352

Spring Boot Web开发(4)---SpringMVC自动配置

前言 先推荐官方文档给大家,参照官方文档学习。 Spring MVC自动配置 Spring MVC自动配置 Spring Boot为Spring MVC提供自动配置,适用于大多数应用程序。就是说Spring Boot 自动配置好了SpringMVC。 以下是SpringBoot对SpringMVC的默认配置:都在 (WebMvcAutoConfiguration) 类中 官方文档中的一段话 ...

chenjia的博客 711

Moltbot 超详细安装使用教程(初学者版)

你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。

weixin_51040479的博客 2015

「SpringBoot3 Web开发」全面接管SpringMVC

SpringMVC自动配置场景默认行为

双向情感障碍-码农 1206

银河麒麟桌面系统批量交付:封装自动化ISO镜像,百台装机效率提升10倍

麒麟桌面系统自动化ISO镜像定制摘要 本文详细介绍麒麟桌面版ISO安装镜像的定制方法,通过修改系统文件实现自动化安装部署。主要内容包括:1) 挂载原版ISO并提取文件;2) 使用unsquashfs解压系统文件进行定制化修改,包括添加系统标记配置;3) 配置ky-installer.cfg自动应答文件,设置安装参数如用户名、密码、分区方案等;4) 修改grub引导配置启用自动安装模式。该流程支持磁盘加密、自定义分区、自动登录等功能,生成的定制镜像可满足批量部署需求,显著提升系统安装效率。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 1508

自动化Google Chrome的强大工具:chromedriver下载、安装、简单使用

本文介绍了 ChromeDriver 的基本概念和安装配置方法,重点讲解了如何通过 Selenium 实现 Chrome 浏览器的自动化测试。内容涵盖了 ChromeDriver 下载、版本匹配、依赖引入和简单的自动化测试脚本示例,帮助读者快速上手并避免常见问题。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 88万+

SpringBoot默认配置原理:以WebMvcAutoConfiguration为例

默认配置类 @EnableAutoConfiguration会开启SpringBoot的自动配置,并且根据你引入的依赖来生效对应的默认配置。那么,这些默认配置是在哪里定义的呢?为何依赖引入就会触发配置呢? 其实,在我们的项目中已经引入了一个依赖:spring-boot-autoconfigure,其中定义了大量自动配置类:下面截图没截完 我们来看一个我们熟悉的,例如SpringMVC,查看mv...

全栈测试笔记 868

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringBoot 项目 @EnableWebMvc 注解应用总结

SpringBoot 项目中不管是在哪个类上使用 @EnableWebMvc 注解,都将导致所有URL访问时返回 404 错误;看到一篇文章:“Spring4 @EnableWebMvc 纯注解启动”,但还没有在 Spring MVC 项目上尝试过。另外参考文章:“解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdap...

无知人生,记录点滴 5万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

springboot踩坑篇-01--@EnableWebMvc注解和@EnableAutoConfiguration 注解

springboot踩坑篇-01 springboot踩坑篇-01–@EnableWebMvc注解和@EnableAutoConfiguration 注解 问题出现 最近项目在用springboot开发,项目当中要用到spring的拦截器; import java.util.Date; import javax.servlet.http.HttpServletRequest; import jav...

father_Blogger的博客 1245

深度学习工具包 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 项目中不管是在哪个类上使用 @EnableWebMvc 注解,都将导致所有URL访问时返回 404 错误

SpringBoot 项目中不管是在哪个类上使用 @EnableWebMvc 注解,都将导致所有URL访问时返回 404 错误; 看到一篇文章:“Spring4 @EnableWebMvc 纯注解启动”,但还没有在 Spring MVC 项目上尝试过。 另外参考文章:“解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAd...

weixin_40913470的博客 577

SpringBoot 项目 @EnableWebMvc 注解应用的总结

在spring-boot+spring mvc 的项目中,有我们需要自己配置一些项目的设置,就会涉及到三个类(@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdapter),那么,他们之间有什么关系呢?  首先,@EnableWebMvc=WebMvcConfigurationSupport,使用了@EnableWebMv...

曾舜尧的专栏 2055

spring boot中慎用@EnableWebMvc - 因使用拦截器开始

在SpringBoot环境中使用拦截器,继承自HandlerInterceptor,进行注册时,实现WebMvcConfigurer接口,重写 addInterceptors() 方法,添加@Component注解添加到Spring容器来注册拦截器。 但是注意到WebMvcConfigurer上有个@EnableWebMvc的提示,文档说明添加此注解可以实现自定义的Spring Mvc 配置。想...

weixin_42245133的博客 1030

【springboot】之 解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdapter

springboot默认格式化日期只需要在application文件中配置登录后复制 spring.jackson.date-format= yyyy-MM-dd HH:mm:ss spring.jackson.time-zone= GMT+8 spring.jackson.locale= zh_CN1.2.3.但是,...

weixin_35810956的博客 161

SpringBoot基本注解

【SpringBoot】 @SpringBootApplication(启动类注解) @SpringBootConfiguration 标注在类上,表示对配置类所有成员生效。是@Configuration注解的派生注解,跟@Configuration注解的功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration是springboot的注解,而@Configuration是spring的注解。 @Target 注解的作用目标 : @Target(ElementType.TYP

ha_hehe的博客 282

理论:第五章:Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点

Spring注解: 声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明(C) 注入bean的注解 @Autowired 由Spring提供 @Resource 由JSR-250提供 java配置类相关注解 @Bean 注解在方法上,声明当前方法的返回值为一个

我是Java程序员廖志伟,感谢朋友们的支持! 6761

关于springboot学习中的一些注解知识

一些注解知识 @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。 其中 @ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。 @Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。 @EnableAutoConfiguration 自动配置。 @ComponentScan 组件扫描,可自动发

m0_47086280的博客 209

SpringBoot实战之SpringBoot自动配置原理

SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的。 1、@EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadF...

qq_39235296的博客 554

SpringBoot 常用注解

@SpringBootApplication 这个配置等同于:@Configuration,@EnableAutoConfiguration和@ComponentScan三个配置。 @EnableAutoConfiguration Spring Boot自动配置(auto-configuration),可以将@EnableAutoConfiguration或者@SpringBoot...

weixin_30446613的博客 91

Spring Boot中关于SpringMVC视图解析

一、注解说明 在spring-boot+spring mvc 的项目中,有些时候我们需要自己配置一些项目的设置,就会涉及到这三个,那么,他们之间有什么关系呢? 首先,@EnableWebMvc=WebMvcConfigurationSupport,使用了@EnableWebMvc注解等于扩展了WebMvcConfigurationSupport但是没有重写任何方法。 所以有以下几种使用方式: @E...

wang5421488的博客 1541
下一篇: 类加载机制和双亲委派模型
Code_Flyer
博客等级 码龄9年 0粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值