学习笔记(05-01):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP

一文学会Spring,Spring最简单的入门教程(万字好文) spring教程 阅读详情

一、使用环绕通知(MethodInterceptor)做日志管理:
在目标方法执行的前后均有需要自动执行的操作,可应用于日志、事务管理

  1. 创建项目,导入jar包:学习笔记(04)系列中的jar包外加AOP的jar包。所导入的jar
  2. ( 使用jdk动态代理的方式)创建一个接口:/AOPProject/src/com/aop/UserDao.java
package com.aop;

public interface UserDao {
	public void addUser(String id, String name);
}
  1. 创建接口的实现类:/AOPProject/src/com/aop/UserDaoImpl.java
package com.aop;

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser(String id, String name) {
		// TODO Auto-generated method stub
		System.out.println("======="+name+"的id是"+id);
	}

}
  1. 创建一个切面类:/AOPProject/src/com/aop/LogAspect.java
package com.aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class LogAspect implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {
		// TODO Auto-generated method stub
		//通过arg0可以获取目标对象的类和方法
		System.out.println(arg0.getMethod());
		//执行正常逻辑之前输出的内容,假装这就是日志
		System.out.println("----------环绕通知开始---");
		//执行逻辑
		//启动目标方法执行
		Object object = arg0.proceed();
		
		//执行逻辑后输出的内容
		System.out.println("----------环绕通知结束---");
		return object;
	}

}
  1. 进行配置:/AOPProject/resource/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
	 <!-- target object -->
	 <bean id="userDao1" class="com.aop.UserDaoImpl"></bean>
	 
	 <!-- 切面 -->
	 <bean id="logAspect1" class="com.aop.LogAspect"></bean>
	 
	 <!-- 使用AOP代理设置关联 -->
	 <bean id="userDaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
	 	<!-- 代理接口 -->
	 	<property name="proxyInterfaces" value="com.aop.UserDao"/>
	 	<!-- 目标对象 -->
	 	<property name="target" ref="userDao1"></property>
	 	<!-- 切面 -->
	 	<property name="interceptorNames" value="logAspect1"></property>
	 	<!-- 判断目标是否为类 -->
	 	<property name="proxyTargetClass" value="false"></property>
	 </bean>
</beans>
  1. 测试:/AOPProject/src/com/aop/TestUserDao.java
package com.aop;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

class TestUserDao {

	@Test
	void testAddUser() {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = context.getBean("userDaoproxy",UserDao.class);
		userDao.addUser("csdn", "Fan_zm");
	}

}

二、前置通知(MethodBeforeAdvice)和后置通知(AfterReturningAdvice):
前置通知(MethodBeforeAdvice)是在目标方法执行前自动执行的操作
后置通知(AfterReturningAdvice)是在目标方法执行后自动执行的操作
对上述一、中的例子执行增添和修改:(相关要点在注释中)

  1. 前置通知切面类:/AOPProject/src/com/aop/LogBeforeAspect.java
package com.aop;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class LogBeforeAspect implements MethodBeforeAdvice{

	@Override
	public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
		// TODO Auto-generated method stub
		//arg1是目标对象接口的方法
		//arg2是目标对象接口的方法的参数
		//arg3是目标对象实现类
		System.out.println("-----前置通知");
		System.out.println("arg0:"+arg0);
		System.out.println("arg2:"+arg2);
	}

}
  1. 后置通知切面类:/AOPProject/src/com/aop/LogAfterAspect.java
package com.aop;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class LogAfterAspect implements AfterReturningAdvice {

	@Override
	public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
		// TODO Auto-generated method stub
		//arg0是目标对象接口的方法的返回类型
		//arg1是目标对象接口的方法
		//arg2是目标对象接口的方法的参数
		//arg3是目标对象实现类
		System.out.println("----后置通知执行。。。");
	}

}
  1. 修改配置文件:/AOPProject/resource/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
	 <!-- target object -->
	 <bean id="userDao1" class="com.aop.UserDaoImpl"></bean>
	 
	 <!-- 切面 -->
	 <bean id="logAspect1" class="com.aop.LogAspect"></bean>
	 <bean id="logBeforeAspect" class="com.aop.LogBeforeAspect"></bean>
	 <bean id="logAfterAspect2" class="com.aop.LogAfterAspect"></bean>
	 
	 <!-- 使用AOP代理设置关联 -->
	 <bean id="userDaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
	 	<!-- 代理接口 -->
	 	<property name="proxyInterfaces" value="com.aop.UserDao"/>
	 	<!-- 目标对象 -->
	 	<property name="target" ref="userDao1"></property>
	 	<!-- 切面 -->
	 	<!-- <property name="interceptorNames" value="logAspect1"></property> -->
	 	<property name="interceptorNames">
	 		<list>
	 			<value>logBeforeAspect</value>
	 			<value>logAfterAspect2</value>
	 			<value>logAspect1</value>
	 		</list>
	 	</property>
	 	<!-- 判断目标是否为类 -->
	 	<property name="proxyTargetClass" value="false"></property>
	 </bean>
</beans>

三、异常通知(ThrowsAdvice):在目标方法执行异常时自动执行的操作
依旧对前例进行补充和修改

  1. 异常通知切面类:/AOPProject/src/com/aop/LogThrowingAspect.java
package com.aop;

import java.lang.reflect.Method;

import org.springframework.aop.ThrowsAdvice;

public class LogThrowingAspect implements ThrowsAdvice {
	//没有需要具体实现的方法,需要自己写处理方法
	//但是对方法的写法有规定
	public void afterThrowing(Method arg0, Object[] arg1, Object arg2,Throwable error) {
		System.out.println("---异常通知");
		System.out.println(error);
	}
}
  1. 修改执行逻辑,人为制造一个异常:/AOPProject/src/com/aop/UserDaoImpl.java
package com.aop;

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser(String id, String name) {
		// TODO Auto-generated method stub
		//制造一个异常,为了测试异常通知
		String er = null;
		System.out.println("==执行逻辑"+name+"的id是"+id+er.charAt(0));

	}

}
  1. 进行配置修改:/AOPProject/resource/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
	 <!-- target object -->
	 <bean id="userDao1" class="com.aop.UserDaoImpl"></bean>
	 
	 <!-- 切面 -->
	 <bean id="logAspect1" class="com.aop.LogAspect"></bean>
	 <bean id="logBeforeAspect" class="com.aop.LogBeforeAspect"></bean>
	 <bean id="logAfterAspect2" class="com.aop.LogAfterAspect"></bean>
	 <bean id="logThrowingAspect" class="com.aop.LogThrowingAspect"></bean>
	 
	 <!-- 使用AOP代理设置关联 -->
	 <bean id="userDaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
	 	<!-- 代理接口 -->
	 	<property name="proxyInterfaces" value="com.aop.UserDao"/>
	 	<!-- 目标对象 -->
	 	<property name="target" ref="userDao1"></property>
	 	<!-- 切面 -->
	 	<!-- <property name="interceptorNames" value="logAspect1"></property> -->
	 	<property name="interceptorNames">
	 		<list>
	 			<value>logBeforeAspect</value>
	 			<value>logAfterAspect2</value>
	 			<value>logAspect1</value>
	 			<value>logThrowingAspect</value>
	 		</list>
	 	</property>
	 	<!-- 判断目标是否为类 -->
	 	<property name="proxyTargetClass" value="false"></property>
	 </bean>
</beans>
  1. 测试结果:异常通知测试结果
    四、引介通知(IntroductionInterceptor):不同于前四种通知类型,引介通知是在目标类中添加一些新的方法和属性,可应用于修改旧版本程序,增强类功能。
    实现过程请看:学习笔记(05-01-B):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP-2
trae CN 配置ida的mcp教程 本文介绍了在TraeCN中配置IDA Pro MCP服务的完整步骤:1)准备IDA Pro 9.0+和Python 3.11+环境;2)安装MCP服务端并配置插件;3)生成MCP配置文件;4)在TraeCN中添加HTTP类型MCP服务(默认端口13337);5)测试连接。重点说明了HTTP配置方式的操作流程,包括手动启动服务、正确填写JSON配置等关键环节。 阅读详情

相关推荐

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

学习笔记(05-02):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用AspectJ基于XML开发AOP

注:与前面的笔记有一点地方不一样,无伤大雅,笔记要点在代码中 AOP的一丁点基础:学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP 使用AspectJ基于XML开发AOP: 一、创建项目,导入相关jar包:(点击下载) spring项目所需基础jar包 使用AspectJ基于XML开发AOP额外需要的jar包 二、创建一个接口:/AOPProjectByAspectJXml/src/com/aop/UserDao.java package com.aop; public in

Fan_zm的博客 259

FFmpeg魔改指南:让RTMP协议完美兼容H265的三种方法(含SRS适配技巧)

本文详细介绍了三种让RTMP协议兼容H265编码的FFmpeg魔改方案,包括基于官方补丁的标准改造、Intel的SVT-HEVC集成方案以及金山云的自定义扩展方案。文章重点解析了各方案的实现原理与适配技巧,并提供了在SRS 6.0服务器上进行深度配置和性能调优的完整实战指南,帮助开发者解决H265推流至传统RTMP服务器的兼容性问题。

weixin_29290947的博客 195

springboot项目使用切面记录用户操作记录

** springboot项目使用切面记录用户操作记录 ** 一、适用场景 业务需求中可能会遇到需要记录用户对某个位置的点击次数,需要统计用户的操作频率,分析用户的操作习惯和规律,从而得出最热文章,最热商品等,然后再根据分析结果给用户推荐对应的文章、商品等。目前最火的当然是大数据分析技术,但是一般的小项目可能用不到,甚至只是想记录一下用户的操作日志,这时候就可以考虑下使用spring的AOP。 二、@Aspect注解 在使用之前我们先来了解下这个东东。AOP为Aspect Oriented Programm

chen_bo526的博客 1954

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4657

世界模型和大语言模型结合开发自动驾驶算法

摘要:自动驾驶系统开发中,融合世界模型和大语言模型可显著提升效率和安全性。世界模型负责环境感知与预测(如目标检测、轨迹预测),而大语言模型优化代码生成、决策解释等环节。实施路径包括需求分析(1-2周)、模型开发(2-4个月)、模拟测试(1-2个月)、实车测试(2-3个月)和合规优化(1-2个月),总周期6-12个月。关键技术工具包括PyTorch/TensorFlow、CARLA模拟器和ROS系统,核心设计理念强调模块化、安全优先和敏捷迭代。示例代码展示了YOLO目标检测与大语言模型决策建议的集成方案。该方

ponygame的博客 826

Docker进阶篇

容器数据卷 什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化 MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地! 容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地! 这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面! 总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的! 使用数据卷 方式一:直接使用命令来挂载 docker run -

lll423的博客 3万+

matlab电子科技大学数学实验期末模拟35道(1)

【代码】matlab电子科技大学数学实验期末模拟35道。

c_wrj_的博客 2044

Spring Boot 开发最佳实践

点击▲关注 “爪哇笔记” 给公众号标星置顶更多精彩 第一时间直达Spring Boot 是最流行的用于开发微服务的 Java 框架。在本文中,我将与你分享自 2016 年以来我在专业...

不是太高的手的专栏 508

YOLOv5基于深度学习的道路缺陷检测系统

然而,由于长期的自然侵蚀、车辆磨损等因素,道路表面容易出现裂缝、坑洼等缺陷。这些缺陷不仅会影响驾驶舒适性,还可能引发交通事故,尤其是在恶劣天气或夜间行车条件下。随着人工智能技术的快速发展,基于深度学习的道路缺陷检测技术能够在降低人力成本的同时提高检测效率,为道路维护提供了新的解决方案。本项目构建了基于YOLOv5的道路缺陷检测系统,结合PyQt5开发了用户友好的UI界面,具备实时检测和图片分析功能。工具对图片进行标注,生成YOLO格式的标注文件。上传包含道路裂缝或坑洼的图片,系统会标注出缺陷的位置及类别。

YOLO 1076

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1208

Spring AOP项目应用——方法入参校验 & 日志横切

应用一:方法入参校验由于系统多个方法入参均对外封装了统一的Dto,其中Dto中几个必传参数在每个方法中都会进行相同的校验逻辑。笔者考虑采用Spring AOP进行优化,拦截方法进行参数校验。测试case实现如下:Before/** * 被代理的目标类 */ @Service public class PayOrderTarget { @Autowired private Pay...

Think In JAVA—Max 2105

42、多媒体与虚拟现实在艺术和影视领域的创新应用

本文探讨了多媒体与虚拟现实在艺术和影视领域的创新应用,涵盖三个典型案例:影视与人类学融合项目通过协作模式模糊作者与观众界限,推动文化文献的发展;交互式数字短片《分手》利用基于对象的广播技术探索个性化影视体验;威尼斯双年展瑞士馆4D项目则通过虚拟现实技术实现文化遗产的数字化展示。这些案例展示了技术在叙事、用户体验及文化保护中的深度应用,并展望了未来技术融合、个性化深化与文化遗产传承的发展趋势。

kappa的博客 114

学习笔记(05-01-B):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP-2

前置通知、后置通知、环绕通知和异常通知的实现:学习笔记(05-01):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP。以下是第五种通知类型——引介通知的实现 5.IntroductionInterceptor(引介通知):不同于前四种通知类型,前四种通知类型是在目标方法前后或者目标方法执行过程中出现异常所进行的一些操作;而引介通知实在目标类中添加一些新的方法和属性,应用于修改旧版本程序,增强类功能。 ...

Fan_zm的博客 224

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

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

视频教程-轻松搞定Spring全家桶(初识篇)-Java

轻松搞定Spring全家桶(初识篇) 毕业于清华大学软件学院软件工程专业,曾...

weixin_34079807的博客 1022

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

学习笔记(01):轻松搞定Spring全家桶(初识篇)-全家桶概述

主要以案例进行讲解,通过案例讲解各技术如何使用,同时在Spring MVC及Spring Boot的最后一部分都是从前端页面、到逻辑层、到持久层的整体的产品的增删改查的实战案例。 【我们保证你能收获到以下几点】 1、掌握Spring全家桶主要部分的开发、实现 2、可以使用Spring MVC、Spring Boot、Sprin...

Fan_zm的博客 403

android 蓝牙通讯demo

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

Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

Spring:出现在2002年左右,降低企业级开发难度。帮助进行模块之间、类与类之间的管理,帮助开发人员创建对象,管理对象之间的关系。2003年传入国内,被大量使用。2017出现新的流行框架SpringBoot,核心思想与Spring相同。核心技术:IoC、AOP,能使模块之间、类之间解耦合。依赖:class A使用class B的属性或方法,称之为class A依赖class B。官网:spring.io2.Spring框架的特点。

老男孩的架构路 221

Spring全家桶笔记,这是真的强!

Spring出现在2002年左右,降低企业级开发难度。帮助进行模块之间、类与类之间的管理,帮助开发人员创建对象,管理对象之间的关系。2003年传入国内,被大量使用。2017出现新的流行框架SpringBoot,核心思想与Spring相同。核心技术IoC、AOP,能使模块之间、类之间解耦合。依赖classA使用classB的属性或方法,称之为classA依赖classB。官网spring.io2.Spring框架的特点轻量。...

老男孩的架构路 304

【Spring全家桶系列】深入学习各模块综合链接

????????????欢迎来到我的博客 ! 亲爱的朋友们,欢迎您们莅临我的博客!这是一个分享知识、交流想法、记录生活的温馨角落。在这里,您可以找到我对世界独特视角的诠释,也可以与我一起探讨各种话题,共享知识的乐趣。文章推荐:Cherry的首页,持续更新,不断总结,共同进步,活到老学到老视频推荐:Cherry的Spring教学视频,系列课程...

weixin_36910725的博客 88

Spring-学习笔记01【Spring框架简介】

Spring-学习笔记01【Spring框架简介】

upward 633

01. Spring编程思想

01 Spring编程思想 Pt1 Spring设计初衷 我基本算是从Struts2时代开始软件开发的,虽然周围接触的还有很多Struts1时代遗留的产物,但是Struts2 + Hibernate已经成为了主流的搭配,后来没过多久Spring开始流行,MVC大行其道,SSH组合成为风靡一时的Java开发框架。那时候要在SSH框架中集成各种组件,都要自己进行装配,也没有JdbcTemplate,每个项目要自己写很多模板代码,更不用说用Servlet开发的年代了。 程序员不只要考虑业务代码的实现,...

Java是世界上最好的语言 423

SSM框架01:Spring的IoC和DI,以及手把手带你创建Spring核心配置文件

↑↑Java语法基础 —> 小型项目练习 —> MySQL 更多学习内容均更新在专栏了,记得关注专栏哦 ↑↑ 🍬JDBC:从CRUD开始,理解JDBC中的各个对象作用,掌握Druid的使用 🍬Maven从安装到手把手教学进行项目管理 🍬MyBatis完成代理方式查询数据以及核心文件配置、 🍬Mybatis:使用映射配置文件实现CRUD操作,能够使用注解实现CRUD操作 🍬Git学习第一天:了解Git基本概念 🍬Git第二天:Git安装与常用命令 🍬Git第三天:搭建Git远程

黑马程序员官方博客 1753

01.初识Spring Boot

一.什么是Spring Boot? Spring Boot是基于Spring框架开发的全新框架,是Spring家族的一个子项目,其设计目的是简化Spring配置,从而可以轻松构建独立运行的程序并极大的提高开发效率。 Spring Boot整合了许多框架和第三方库配置。几乎可以达到“开箱即用”。 二.Spring Boot的优点: 可快速构建独立的Spring应用 直接嵌入Tomcat/Jet...

C_leng的博客 1547

spring学习笔记

思维导图:https://www.processon.com/mindmap/5f9faae607912948e6e72f5a spring全家桶:spring,springMVC,spring boot,spring cloud spring:出现在2002年左右,解决企业开发的难度。减轻对项目模块之间的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。 spring核心技术:ioc,aop。能实现模块之间,类之间的解耦合。 依赖:class A中使用class B的属性或者方法,叫做cl

qq_44989208的博客 680

第21~22周Java主流框架入门-Spring 2.SpringAOP面向切面编程

本节课程将通过实际项目配置,带领大家一步一步理解Spring AOP(面向切面编程)的功能。我们将基于 XML 配置的形式来实现 AOP,并通过演示了解 AOP 如何对现有系统进行功能扩展,而无需修改源代码。本次演示基于s01工程,其中包含了两个主要部分:DAO 层:包括和UserDao,分别用于对员工表和用户表的数据增删改查。Service 层:包括和,分别提供了员工相关的业务逻辑和用户管理的业务逻辑。:提供entry方法,模拟员工入职操作。:提供createUser方法(创建用户)和。

Sweeping_Robot的博客 1210

史上最全系列!Spring+SpringBoot+SpringCloud全攻略,助你一站通关,拿下大厂offer

前几天,有幸从朋友那里得到了一份Alibaba内部的墙裂推荐的“玩转Spring全家桶的PDF”,我也不是个吝啬的人,好的东西当然要一起分享。那今天我就秀一把,带你一站通关Spring、Spring Boot与Spring Cloud,让你轻松斩获大厂Offer! 这份PDF能得到的收获: 使用 Spring 熟练开发 Web 服务; 搞懂 Spring Boot 核心功能的实现原理; 通过 Spring Cloud 快速构建微服务架构; 掌握 Spring 个性化定制与扩展的进阶方法.

m0_50180963的博客 238
上一篇: 学习笔记(05):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:
下一篇: 学习笔记(05-01-B):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP-2
Fan_zm
博客等级 码龄9年 1粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值