11.Bean使用拾遗(一)

从零开始的 AI Infra 学习之路 AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。 阅读详情

11.Bean使用拾遗(一)

1. 内部bean

<bean id="a" class="com.xxx">
	<properties name="car">
    	<bean class="com.xxx.car" p:name="BMW">
        </bean>
    </properties>
</bean>

2. null值

<bean id="a" class="com.xx">
	<property name="name"><null/></property>
</bean>

3.集合合并,允许子继承父同名集合属性合集

<bean id="parentBoss" class="com.xxx">
	<property name="favorites">
    	<set>
        	<value>看报</value>
            <value>高尔夫</value>
        </set>
    </property>
</bean>

<bean id="chidBoss" class="com.xxx" parent="parentBoss">
	<property name="favorites">
        <set merge="true">
        	<value>爬山</value>
            <value>游泳</value>
        </set>
    </property>
</bean>

4.lookup方法注入

package com.desmond.springlearning.lookup;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
    private String name;
}

package com.desmond.springlearning.lookup;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:16
 */
public interface CarFactory {
    Car getCar();
}

package com.desmond.springlearning.lookup;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:22
 */
public class Test {
    public static void main(String[] args) {
        Resource resource = new ClassPathResource("lookup/application.xml");
        XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);

        CarFactory carFactory = (CarFactory)xmlBeanFactory.getBean("carFactory");

        System.out.println(carFactory.getCar().getName());
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "
       default-autowire="default">

    <bean id="car" class="com.desmond.springlearning.lookup.Car" p:name="BMW" scope="prototype" />

    <bean id="carFactory" class="com.desmond.springlearning.lookup.CarFactory">
        <lookup-method name="getCar" bean="car"/>
    </bean>

</beans>

5.replace-method(方法替换)

package com.desmond.springlearning.method_replace;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
    private String name;
}

package com.desmond.springlearning.method_replace;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:33
 */
public class Boss1 {
    public Car getCar() {
        return new Car("BMW");
    }
}


package com.desmond.springlearning.method_replace;

import org.springframework.beans.factory.support.MethodReplacer;

import java.lang.reflect.Method;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:33
 */
public class Boss2 implements MethodReplacer{

    public Object reimplement(Object o, Method method, Object[] objects) throws Throwable {
        System.out.println(o); // 目标对象,即boss1的代理对象
        System.out.println(method); // 目标方法,即boss1.getCar
        System.out.println(objects); // 目标方法的参数,即getCar的参数列表

        // 此行会抛出栈溢出错误
        // 原因:o 为 boss1 cglib的代理对象,代理了getCar方法,
        /*
            代理后的getCar 方法,方法体:
            boss2.reimplement(this, method, xxx);
            相当有自己调用自己,死循环.
         */
//        return method.invoke(o, objects);

        return new Car("LUHU.");
    }
}

package com.desmond.springlearning.method_replace;

import com.desmond.springlearning.lookup.CarFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.cglib.core.DebuggingClassWriter;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:22
 */
public class Test {
    public static void main(String[] args) {
        // 生成spring cglib 代理类文件
        System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/Users/presleyli/java/desmond/codebase/spring-learning/src/main/java/com/desmond/springlearning/method_replace/clz");

        Resource resource = new ClassPathResource("method_replace/application.xml");
        XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);

        Boss1 boss1 = (Boss1) xmlBeanFactory.getBean("boss1");
        Boss2 boss2 = (Boss2) xmlBeanFactory.getBean("boss2");

        System.out.println(boss1.getCar().getName());
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "
       default-autowire="default">

    <bean id="car" class="com.desmond.springlearning.method_replace.Car" p:name="BMW" scope="prototype" />

    <bean id="boss1" class="com.desmond.springlearning.method_replace.Boss1">
        <replaced-method name="getCar" replacer="boss2"/>
    </bean>

    <bean id="boss2" class="com.desmond.springlearning.method_replace.Boss2"/>

</beans>

6. rquest & session作用域

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
       default-autowire="default">

    <bean id="car" class="com.desmond.springlearning.method_replace.Car" p:name="BMW" scope="request" >
        <aop:scoped-proxy/>
    </bean>

    <bean id="boss1" class="com.desmond.springlearning.method_replace.Boss1">
        <property name="car" ref="car"/>
    </bean>

</beans>

此例中,boss1为单例,car,每次http请求都会创建一个新的代理类car.动态代理的逻辑如下:判断当前boss1属于哪个线程下 -> 取出该线程对应的httpSevletRequest -> 从request域中取出car(不存在则先创建) -> 使用;如果作用域为session, 过程如下:判断当前boss1属于哪个线程下 -> 拿到该线程对应的httpSevletRequest -> request.getSession() -> 从session里获取car(不存在则先创建) -> 使用.

  1. FactoryBean

    package com.desmond.springlearning.factory_bean;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author presleyli
     * @date 2018/10/24 下午9:16
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Car {
        private String name;
        private String slogon;
    }
    
    
    
    package com.desmond.springlearning.factory_bean;
    
    import org.springframework.beans.factory.FactoryBean;
    
    /**
     * @author presleyli
     * @date 2018/10/24 下午10:17
     */
    public class CarFactoryBean implements FactoryBean<Car>{
    
        private String carInfo;
    
        public Car getObject() throws Exception {
            String[] arr = this.getCarInfo().split(",");
    
            return new Car(arr[0], arr[1]);
        }
    
        public Class<?> getObjectType() {
            return Car.class;
        }
    
        public boolean isSingleton() {
            return true;
        }
    
        public String getCarInfo() {
            return carInfo;
        }
    
        public void setCarInfo(String carInfo) {
            this.carInfo = carInfo;
        }
    }
    
    
    
    package com.desmond.springlearning.factory_bean;
    
    import com.desmond.springlearning.lookup.CarFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    
    /**
     * @author presleyli
     * @date 2018/10/24 下午9:22
     */
    public class Test {
        public static void main(String[] args) {
            Resource resource = new ClassPathResource("factory_bean/application.xml");
            XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);
    
            Car car = (Car)xmlBeanFactory.getBean("car");
            CarFactoryBean carFactory = (CarFactoryBean)xmlBeanFactory.getBean("&car");
    
            System.out.println(car);
            System.out.println(carFactory);
        }
    }
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "
           default-autowire="default">
        <bean id="car" class="com.desmond.springlearning.factory_bean.CarFactoryBean" p:carInfo="BMW,被摸我!"/>
    
    </beans>
    
    output:
    十月 24, 2018 10:22:58 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [factory_bean/application.xml]
    
    Car(name=BMW, slogon=被摸我!)
    com.desmond.springlearning.factory_bean.CarFactoryBean@2133c8f8
    
    Process finished with exit code 0
    
最强游戏投屏串流搭档Sunshine+Moonlight配置方法 因祸得福的是,sunshine作为开源的self-host的服务端,不仅可以代替Novidia的服务端角色,还拓展了moonlight可以服务的主机,非novidia显卡的PC也可以通过这对搭档实现高质量的游戏窜流投屏了。回到moonlight,点击电脑图表,会给你一个Pincode,到Sunshine控制台,菜单点击Pin,输入moonlight给出的pin码。高质量的图像: Moonlight支持高清(HD)和甚至4K分辨率的投屏,同时还提供了对音频的传输支持,确保用户可以享受到高质量的视频和音频。 阅读详情

相关推荐

带挂牵引车倒车运动模型推导及仿真实现

半挂牵引车在倒车时,由于鞍座主销的连接限制,其运动方式与乘用车有显著差异。例如,乘用车在右侧倒车入库时,只需确定泊车起点并将方向盘向右打死。相反,牵引车在倒车时需要先向左转方向盘,当铰接角达到防折叠的临界值时,再将方向盘向右转回,以调整牵引车与挂车至直线状态,完成泊车入库。本研究旨在建立一个基于牵引车带挂车倒车运动学模型,该模型基于以下假设: 道路在车辆行驶过程中保持平坦,无凹凸不平; 车辆以低速行驶,且在运行过程中车身不发生侧倾或俯仰; 行驶过程中,轮胎无变形,无侧向滑动,且不产

jianmo的博客 2697

Android WebView H5开发拾遗

上篇介绍了一些WebView的设置,本篇为一些补充项。 首先加载HTML5的页面时,会出现页面空白的现象,原因是需要开启 DOM storage API 功能: webSettings.setDomStorageEnabled(true); 其次,开发中需要注意的安全漏洞,详见《如何设计一个优雅健壮的Android WebView》: @TargetApi(1...

weixin_30879169的博客 129

多智能体强化学习MASAC算法:从原理到PyTorch实战详解

深度强化学习通过智能体与环境的交互试错来学习最优策略,是解决复杂序列决策问题的核心技术。其核心原理在于利用价值函数或策略梯度来最大化累积奖励,在机器人控制、游戏AI等领域展现出巨大技术价值。当面对多个智能体需要协同或竞争的复杂动态环境时,单智能体算法因环境非平稳性而面临挑战,多智能体强化学习应运而生。Multi-Agent Soft Actor-Critic (MASAC) 算法融合了SAC的稳定高效与中心化训练去中心化执行的范式,通过维护中心化Critic网络和独立策略网络,有效解决了多智能体协作中的信用

weixin_30080745的博客 329

(新) Kotlin搞起来 —— 教程引言与目录

作为一个假的Android开发者,并没有通宵去看 Google I/O 2017开发者大会。早上和往常 一样起床坐地铁上班,习惯性掏出手机看看资讯,才知道 Kotlin 成为Android官方编程语言。 得知这一消息后,感到有些兴奋,使用Kotlin也有一年多了,期间写过一个完整项目,现在接手 别人的项目重构也直接上的Kotlin,习惯了Kotlin写代码的简洁,高效,酷炫,写回Java

Coder-Pig的猪栏 18万+

决策树简介/PPT

最近给我们组新生讲了决策树的相关知识,以下是所做的PPT,参考了网络资源。

垃圾就应该待在垃圾桶里的博客 3795

让AI镜头“活”起来:22个核心运镜提示词,告别视频画面呆板

介绍了22种影视级镜头语言的AI提示词用法。内容涵盖推轨/后拉镜头等距离变化技巧、横摇/俯仰等方向控制手法、环绕/升降等空间位移方式,以及POV视角等特殊构图。

weixin_43489601的博客 6278

4.工厂模式

文章目录4.工厂模式简单工厂类图优缺点code输出工厂方法类图优缺点code输出抽象工厂类图优缺点code输出 4.工厂模式 简单工厂 类图 优缺点 优点 简单,解耦。 缺点 当需要扩充业务时,需要对BaoziFactory进行修改,当废弃某一产品时,也需要修改factory代码,产品过多,可能导致factory代码过长,冗余度高。 code package com.desmon...

desmond的专栏 530

STM32 移植FreeModbus详细过程

modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。 这里详细说下如何将freemodbus移植到stm32平台。我之前下载的版本是1.6,我会在我的下载链接里面加上1.6的freemodbus压缩包以及我已经移植好的stm32 for freemodbus版本。我上传的移植好的绝对没问题,经过多个板子测试。这里编译器使用的是keil5.28,单片机用的是STM32F103RCT6。 移植到VET6以及ZET6的话只需要改一下选择的芯片就好,改法:

qq_40305944的博客 8万+

15.观察者模式&发布/订阅模式

文章目录15.观察者模式&amp;发布/订阅模式1. 观察者模式1.概念&amp;优缺点2.类图3.代码2.发布-订阅模式1.概念2. 两个模式最重要的区别3. 差异总结 15.观察者模式&amp;发布/订阅模式 1. 观察者模式 1.概念&amp;优缺点 概念 观察者模式: 1. 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 2....

desmond的专栏 520

DeepSeek-V4-Pro 正式版突袭上线:Agent 能力暴涨,DeepSWE 直接干翻 Claude Opus 4.8

8 月 12 日深夜,DeepSeek 悄悄在 API 文档里上架了一个新版本号——DeepSeek-V4-Pro-0813。第二天(13 日),这个版本被确认为 V4 Pro 正式版。没有发布会,没有预热,只改了版本号,就把整个 AI 圈的注意力又抢了过去。

2601_96613114的博客 839

保姆级图解:HKMG工艺中的‘覆盖层’(Cap Layer)到底怎么调阈值电压?

本文深入解析了HKMG工艺中覆盖层(Cap Layer)如何精准调控阈值电压的关键技术。通过原子级精度的ALD工艺和材料选择,覆盖层在半导体制造中扮演着隐形调节器的角色,直接影响晶体管的电气特性。文章详细介绍了La2O3和Al2O3等材料的特性对比、ALD工艺的原子级控制,以及实战调试中的关键步骤和问题排查方法。

weixin_27032989的博客 496

2.知识点拾遗-轻量级容器和控制反转

POJO编程模型 原来的EJB编程模型存在的问题 POJO编程模型的优点 轻量级容器和控制反转 轻量级容器 控制反转 依赖注入 POJO编程模型 原来的EJB编程模型存在的问题 ​ 笨重,业务程序与EJB框架耦合严重,无法在JEE平台之外运行组件,开发-打包-部署-测试流程长且复杂。 POJO编程模型的优点 ​ 简单,轻量,无耦合 轻量级容器和...

desmond的专栏 479

3. 动手运行第一个 SAP Fiori Elements 应用(ListReport 类型)

这个代理服务器能够自动监听我们 Fiori Elements 应用里向 ES5 Demo 系统发送的 OData 请求,拦截这个请求,并通过 Node.js 代码向 ES5 服务器转发,拿到响应数据后再交还给 Fiori Elements 应用。后者对自己发出的请求被代理这件事情一无所知。本文的任务是,大家按照我的介绍,在本地成功运行笔者准备的这个 Fiori Elements 应用。的错误消息, 说明大家安装的 Node.js 版本没有达到本地运行 Fiori Elements 的最低要求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1671

14.国际化信息

文章目录14.国际化信息1. 数字格式化2. 日期格式化3. 消息格式化4. 资源化文件5. 动态资源文件4. Spring MessageSource-without Application5. Spring MessageSource-with Application 14.国际化信息 1. 数字格式化 public static void formatNum () { Loc...

desmond的专栏 398

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

3.IOC容器

ioc容器 三种配置方式 依赖注入 自定义属性解析器 循环依赖(构造器) 描述 解决 重写Bean定义 配置元素 基于Java配置 基于XML配置 容器级别 ioc容器 三种配置方式 XML:最基本,最完整、强大 注解(Annotation),@Sine 2.5 疑问:基于注解,怎么读取&lt;context:component-scan base...

desmond的专栏 392

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

7.高级装配(一)

文章目录7.高级装配(一)1. 环境与Profile1.解决不同环境不同配置2.配置方式2. 条件化bean1. 概念2. 举例 7.高级装配(一) 1. 环境与Profile 1.解决不同环境不同配置 maven构建时,使用profiles来确定将哪一个配置编译到可部署的应用 缺点:不同环境重新构建,可能引入bug 使用Spring profile 2.配置方式 Java 可以...

desmond的专栏 365

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

6.装配Bean

文章目录6.装配Bean装配方案通过自动化装配通过Java代码装配通过XML装配导入和混合装配 6.装配Bean 装配方案 基于xml 基于java 基于隐式地bean发现与自动装配 通过自动化装配 优点 便利,自动化,可以解决大部分问题 Spring从两个角度来实现自动转配 组件扫描(component scan) xml &lt;context:component-sc...

desmond的专栏 362

10.设计模式&OO原则概览

文章目录10.设计模式&amp;amp;OO原则概览 10.设计模式&amp;amp;OO原则概览 OO基本概念 抽象 封装 继承 多态 OO原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松耦合而努力 设计原则 找出可能变化的代码,把他独立封装,不要和那些不需要变化的代码混在一起 针对接口编程,而不是针对实现编程 良好的OO设计必须具备三个特性: ...

desmond的专栏 356

16.容器事件

文章目录16.容器事件1. 概念2. Spring事件类结构1. 事件类 `ApplicationEvent`2. 事件监听接口 `ApplicationListener`3. 事件广播 `ApplicationEventMulticaster`3. 实现示例 16.容器事件 1. 概念 Spring的ApplicationContext能够发布事件并且允许注册相应的事件监听器,因此,它拥有一套完...

desmond的专栏 353

21.配置文件读取以及验证(一)

文章目录Resource概述类图Bean加载获取Document类图寻找验证模式(DTD or XSD) Resource 概述 ​ Resource抽象了所有Spring内部使用到的底层资源:File、URL、Classpath等。这接口定义了三个判断短浅资源状态的方法:exists, isReadable, isOpen. 类图 Bean加载 获取Document 类图 ​ 加载docum...

desmond的专栏 348

25.Bean加载过程

文章目录1.BeanFactory v.s. FactoryBean1.BeanFactory2. Bean加载过程 1.BeanFactory v.s. FactoryBean 1.BeanFactory BeanFactory, 即bean工厂,通常用于访问spring容器. FactoryBean,工厂模式,本身为一个bean,用于创建bean,以下是描述 /** * Interface ...

desmond的专栏 330

22.配置文件读取以及验证(二)

文章目录获取Document寻找文档DTD的定义(EntityResolver) 获取Document 寻找文档DTD的定义(EntityResolver) ​ 在验证xml之前,需要找到这个xml的申明文件(DTD or XSD), 在 dtd/xsd + 验证模式的作用下,对xml进行验证. 此dtd/xsd, 通常声明为一网络地址,如果不指定EntityResolver, xml验证器会通过...

desmond的专栏 306

17.内部工作机制

文章目录17.内部工作机制1. 概览图2. 说明 17.内部工作机制 1. 概览图 2. 说明 InstantiationStrategy 负责创建对象,策略模式,参见18.策略模式 BeanWrapper ​ 相当于一个代理器,Spring委托BeanWrapper完成Bean属性的填充工作。在Bean实例被InstrantitationStrategy被创建出来之后,容器主控程序将B...

desmond的专栏 302

23.bean标签的解析及注册

文章目录1. Xml的解析概览1.1 xml解析1.2 xml解析(内)2. bean的解析2.1 默认标签2.2 自定义标签 1. Xml的解析概览 1.1 xml解析 1.2 xml解析(内) 2. bean的解析 2.1 默认标签 2.2 自定义标签 ...

desmond的专栏 280

5.Spring Bean生命周期.md

文章目录5.Spring Bean生命周期生命周期流程图说明总结 5.Spring Bean生命周期 生命周期流程图 说明 *调用InstantitationAwareBeanPostProcessor的postProcessBeforeInstantitation()方法 实例化:Class clazz, custructor或者 newInstance *调用用InstantitaonAw...

desmond的专栏 268

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 282
上一篇: 10.设计模式&OO原则概览
下一篇: 12.Bean使用拾遗(二)
desmond_assis
博客等级 码龄14年 33粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值