自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1101)
  • 资源 (9)
  • 收藏
  • 关注

原创 JVM专题

从JDK源码级别彻底剖析JVM类加载机制

2022-02-01 16:47:01 532

原创 MySQL学习系列

系列文章目录MySQL 的分支、变种与替代

2021-12-31 22:51:06 575

原创 gradle构建工具学习系列

系列文章目录

2021-12-18 12:05:23 696

原创 并发编程系列

系列文章目录并发编程之深入理解JMM&并发三大特性并发编程之深入理解Java线程

2021-11-28 16:07:26 536

原创 MyBatis源码学习系列文章目录

系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合...

2021-04-24 21:44:25 359

原创 腾讯课堂某培训机构Spring源码问题集锦

系列文章目录注解方式与xml方式注册问题

2021-04-17 11:12:25 419

原创 MyBatis工作流程-与Spring整合

系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合文章目录系列文章目录 前言与MyBatis相关的Beanbean实例化的流程1. Sql

2020-12-19 16:12:11 422 1

原创 兼容Oracle与MySQL的一些事

文章目录前言一、字段类型差异二、函数差异 1、几种兼容方案a. 利用Mybatis的特性b. 是否存在相同的函数c. 自定义同名函数三、语法差异四、锁的差异总结前言由于公司目前主要使用的数据库为Oracle,然后部分兼容MySQL,后期会考虑全部支持Oracle和MySQL。由于二者的各种差异,我们必须有一套可行的方案减少工作量。在兼容Oracle与MySQL的那些事中我们已经仔细讨论过在数据层对多数据库的支持了,接下来的目标就是结合这种支持同时考虑其他手段达到目标了。本文从以下几点来谈一下对兼容考

2020-11-09 10:56:58 2327 7

原创 从 JDK 8 到 JDK 17:那些改变 Java 开发方式的新特性

2014 年 JDK 8 的发布无疑是 Java 历史的里程碑,Lambda 表达式和 Stream API 让 Java 正式拥抱函数式编程。然而在此之后,Java 的发布节奏发生了根本性变化——从 2018 年起,Oracle 采用“每 6 个月一个版本”的快节奏发布策略。JDK 17 于 2021 年 9 月发布,是继 JDK 8 和 JDK 11 之后的第三个 LTS(长期支持)版本,提供长达 8 年的官方支持。从 JDK 8 到 JDK 17,Java 平台由约。

2026-09-04 10:06:59 283

原创 Spring Boot DispatcherServlet 自动配置源码深度解读

位于包下,是 Spring Boot 对 Spring的自动配置实现。独立应用(Standalone Application):使用嵌入式 Web 服务器(如 Tomcat、Jetty、Undertow)的场景;可部署应用(Deployable Application):使用部署到外部容器的场景。// ...中定义了两个自定义条件类,它们共同决定了自动配置是否生效。通过源码分析,我们可以总结出。

2026-09-04 10:06:03 254

原创 Spring Boot WebMvcAutoConfiguration 源码深度解析

模板方法模式定义创建组件的骨架,子类()通过重写等方法提供扩展点。策略模式提供替代实现策略,定义路径匹配策略。外部化配置模式将 Spring Boot 配置属性()应用到 Spring MVC 的默认配置中,实现"约定优于配置"。提供者模式(懒加载):通过和实现模块间松耦合,仅在 Bean 实际可用时才进行依赖获取,避免不必要的初始化。是 Spring Boot "自动配置哲学"的典范之作。它通过精心设计的条件装配、分层扩展点以及"用户优先"原则,实现了"开箱即用"与"灵活定制"的完美平衡。

2026-09-03 19:30:37 333

原创 Spring MVC 配置深度解析:WebMvcConfigurer 接口全览(含默认实现剖析)

作用:返回自定义的Validator(校验器)实例。若返回null,则使用默认的 JSR-303 校验器。默认实现会创建一个(如果类路径上有 JSR-303 实现,如 Hibernate Validator)。作用:返回自定义的,用于生成校验错误时的消息码。默认实现默认返回null,此时会使用。是 Spring MVC 定制的“瑞士军刀”。理解其背后的(核心默认配置)、的桥梁)以及 Spring Boot 的。

2026-09-03 18:58:36 277

原创 深入解读 Spring Framework 的五大设计哲学

↓↓↓“提供选择”是出发点——Spring 相信开发者有能力做出正确的决定。“包容多元”是态度——不强迫、不排他,尊重每一种合理的实现方式。“向后兼容”是承诺——你的投资不会因为框架升级而贬值。“API 设计”是手段——用直观的接口降低学习成本,用分层设计兼顾易用性与灵活性。而**“代码质量”** 是这一切的基石——没有干净的内部结构,前四条都是空中楼阁。一个框架凭什么让开发者信任它二十年?

2026-08-16 12:41:48 251

原创 深入解读 Spring Framework 的五大设计哲学

↓↓↓“提供选择”是出发点——Spring 相信开发者有能力做出正确的决定。“包容多元”是态度——不强迫、不排他,尊重每一种合理的实现方式。“向后兼容”是承诺——你的投资不会因为框架升级而贬值。“API 设计”是手段——用直观的接口降低学习成本,用分层设计兼顾易用性与灵活性。而**“代码质量”** 是这一切的基石——没有干净的内部结构,前四条都是空中楼阁。一个框架凭什么让开发者信任它二十年?

2026-08-16 12:41:12 264

原创 从 J2EE 到云原生:Spring Framework 的设计哲学与演进之路

面对复杂的 J2EE,它没有另立标准,而是用更轻量的方式集成规范。面对 Jakarta EE 的包名变更,它果断升级基线,始终保持前沿兼容性。面对云原生和 DevOps 的浪潮,它借助 Spring Boot 和 WebFlux 重新定义了应用交付方式。从 2003 年到 2026 年,Spring 已经走过了二十余年的历程。从最初的轻量级容器到如今的响应式、云原生、模块化全面支持,Spring 始终保持着旺盛的生命力。理解这些背景,不仅能帮助我们更好地应对每一次技术升级,更能让我们。

2026-08-16 10:44:35 360

原创 Spring SOAP Web Service 完整实战指南:从服务端到客户端(Spring Boot 3.x 修正版)

在微服务和 RESTful API 大行其道的今天,SOAP(Simple Object Access Protocol)依然在企业级集成、金融系统、电信等领域占据重要地位。其严格的契约规范、内置的安全标准和事务支持,使其在需要高可靠性和标准化的场景中不可或缺。本教程将基于 Spring 官方指南,完整地带领你从零构建一个 SOAP 服务端,并开发一个客户端来消费该服务。我们将深入每一行代码、每一个配置,确保你不仅"跑通"案例,更理解其背后的原理。

2026-08-15 11:35:06 501

原创 资管系统核心知识全景指南:从产品架构到资金清算的底层逻辑

通俗理解产品是你在银行或券商买到的那个"理财计划"(比如"稳盈1号"),它是面向投资者的外衣;投组(投资组合)则是系统内部用来装钱、装股票、算账的"真实钱包"。业务细节:在资管系统中,通常是"一个产品对应多个投组"。为什么要这么设计?为了满足监管要求的**"三单"原则(单独管理、单独建账、单独核算)** ,以及隔离不同策略、不同资金来源的风险,系统会在底层将产品拆分为多个投组。系统落地:在系统里,所有的交易指令、估值核算、风控校验,都是基于"投组"这个最小颗粒度来进行的。监管依据。

2026-08-05 11:03:35 185

原创 一文读懂资管系统里的“清算路径”:钱和券的“导航地图”

简单来说,清算路径就是给每一笔交易预设好的“导航路线”。钱从哪个银行账户出?通过哪家证券公司去买?用哪个股东账户去登记?买回来的股票记在谁的名下?“清算路径”就是把这一连串问题的答案提前配置好。它连接了银行托管户(钱的源头)、券商(交易的中介)和交易所(买卖的市场)。没有配好这条路,交易就无法闭环。清算路径是金融基础设施的缩影。资金如何安全地从银行流向市场;资产如何合法地归属到产品名下;交易数据如何在不同系统间流转。它是资管系统能够日复一日、准确无误地处理亿万级交易的基石。

2026-08-05 10:55:36 233

原创 企业会计准则第5号——生物资产(2006)深度解读:确认、计量与实务案例

准则第三条规定,生物资产分为消耗性生物资产生产性生物资产和公益性生物资产(一)消耗性生物资产:是指为出售而持有的、或在将来收获为农产品的生物资产,包括生长中的大田作物、蔬菜、用材林以及存栏待售的牲畜等。消耗性生物资产本质上类似于工业企业的存货——其价值通过一次性的出售或收获来实现。(二)生产性生物资产:是指为产出农产品、提供劳务或出租等目的而持有的生物资产,包括经济林、薪炭林、产畜和役畜等。生产性生物资产类似于工业企业的固定资产——其在多个生产周期中持续发挥作用,价值通过折旧逐步转移。(三)公益性生物资产。

2026-08-04 13:50:09 283

原创 企业会计准则第4号——固定资产(2006)深度解读:确认、计量与实务案例

准则第三条规定,固定资产是指同时具有下列特征为生产商品、提供劳务、出租或经营管理而持有的——强调了持有目的,排除了作为存货(待售)的房地产;使用寿命超过一个会计年度——体现了长期资产的特征。第一,持有目的的多样性。固定资产不仅包括生产用设备,还包括为出租而持有的资产(但不能是投资性房地产)。例如,一家从事设备租赁的公司持有的机器设备,同样属于固定资产。第二,“使用寿命”的双重含义。准则明确指出:使用寿命是指企业使用固定资产的预计期间,或者该固定资产所能生产产品或提供劳务的数量。

2026-08-03 14:41:12 323

原创 企业会计准则第3号——投资性房地产(2006)深度解读:确认、计量与实务案例

准则第二条规定:“投资性房地产,是指为赚取租金或资本增值,或两者兼有而持有的房地产。”同时,投资性房地产应当能够单独计量和出售。已出租的土地使用权:指以经营租赁方式出租的土地使用权;持有并准备增值后转让的土地使用权:指企业取得的、准备增值后转让的土地使用权。但按照国家有关规定认定的闲置土地,不属于此类;已出租的建筑物:指企业拥有产权的、以经营租赁方式出租的建筑物。《企业会计准则第3号——投资性房地产》的制定,标志着我国会计准则在资产分类和计量方面的重要进步。

2026-08-03 14:33:16 280

原创 关于《企业会计准则第14号——收入》的完整指南

企业会计准则第14号——收入》是整个企业会计准则体系中应用最广泛、影响最深远的具体准则之一。它不像基本准则那样回答“为什么要这样做账”,而是告诉你“收入到底该怎么确认和计量”。2017年7月5日,财政部正式发布了修订后的《企业会计准则第14号——收入》(财会〔2017〕22号)。这次修订是收入准则历史上最大的一次变革——它取代了原《企业会计准则第14号——收入》和《企业会计准则第15号——建造合同》,用一套统一的“五步法”模型来规范所有与客户之间的合同产生的收入。

2026-07-23 20:01:20 1222

原创 企业会计准则——基本准则全攻略:从入门到精通

企业会计准则——基本准则》是整个企业会计准则体系的“根本大法”。它不像存货、长投等具体准则那样教你“怎么做账”,而是告诉你“为什么要这样做账”。基本准则只有50条,但贯穿了从会计确认、计量到报告的全过程。它定义了资产、负债、所有者权益、收入、费用、利润六大会计要素,确立了八大会计信息质量要求,规范了五种会计计量属性——这些是所有具体准则的共同基础。初学者常觉得基本准则太抽象、太理论,不如具体准则“实用”。但事实上,所有具体准则的条款都是基本准则原则的具体化。

2026-07-21 20:03:34 409

原创 企业会计准则第1号——存货全攻略:从入门到精通

存货是企业资产中最常见、最基础的项目之一,但看似简单,背后却藏着不少容易踩坑的知识点。从采购成本该不该计入存货,到发出存货用哪种计价方法,再到存货跌价准备如何计提与转回——每一个环节都有明确的准则规定。本文将用大白话 + 详细案例 + 完整的报表影响分析的方式,把存货准则的核心内容彻底讲透。本文对每一个案例都分别列出资产负债表(资产、负债、所有者权益分项)和利润表的变动,让你清清楚楚看到每一笔分录如何影响报表。适用准则:《企业会计准则第1号——存货》(财会〔2006〕3号),共4章22条。

2026-07-21 17:34:51 420

原创 长期股权投资准则全攻略:从入门到精通

以下按之前12个案例的顺序,逐条补充对应的准则依据。

2026-07-16 10:09:34 324

原创 Apache POI Word(docx) 实战教程:从入门到精通表格合并、图片插入与文档合并

在日常开发中,我们经常需要动态生成 Word 文档——无论是生成报表、合同、还是导出各类业务数据。Apache POI 的 XWPF 模块是 Java 生态中操作.docx格式文档的事实标准,而 poi-tl 则在 POI 基础上提供了更强大的模板引擎能力。本文将基于官方入门教程,进行大幅度的充实和扩展,提供完整可运行的示例代码,并对表格合并、图片插入、文档合并等高级操作做深入演示。无论你是 POI 初学者还是有一定经验的开发者,都能从中找到实用价值。

2026-07-07 10:19:01 355

原创 告别手动写报告!这款 Java 模板引擎让你轻松生成复杂 Word 文档

动态生成 Word 文档——比如项目报告、合同、简历、产品说明书、数据分析报表……如果是纯文本替换,用 Freemarker 或者直接字符串替换还能应付,但一旦涉及到图片、表格、图表、多级列表、嵌套文档,事情就变得棘手起来。今天给大家推荐一款专注于 Word 文档生成的 Java 模板引擎 ——poi-tl。它是基于 Apache POI 构建的,但无需理解 POI 的底层 API,你只需要在 Word 模板中写标签,在 Java 中传数据,就能得到一份风格精美的文档。而且它的设计理念是“所见即所得”

2026-07-03 11:15:26 329

原创 一张表读懂企业会计准则:从入门到实战的“财务宪法”解读

本文系统解读《企业会计准则——基本准则》的核心框架,帮助非财务人员快速掌握财报阅读的关键逻辑。文章从两大报表(资产负债表、利润表)的基本公式出发,深入讲解会计信息质量的“八项军规”、六大会计要素(资产、负债、所有者权益、收入、费用、利润)的定义与确认条件,以及五种会计计量属性(历史成本、重置成本、可变现净值、现值、公允价值)。通过面包店案例贯穿始终,重点解析了利得/损失的两条去向、收入确认的“总额法 vs 净额法”、费用确认的三条路线,以及公允价值作为“脱手价”的本质。

2026-06-25 16:35:06 440

原创 彻底搞懂 SLF4J 桥接模块:让老日志 API 乖乖听话

桥接模块用途核心操作风险/注意将 JCL 调用重定向到 SLF4J替换不能与共存slf4j-jcl将 SLF4J 调用委托给 JCL(极少用)添加 jar不能与共存将 Log4j 1.x 调用重定向到 SLF4J替换log4j.jar不能与共存;不适用于 Appender 等高级组件将 JUL 日志路由到 SLF4J安装性能开销大;不能与共存最佳实践建议优先迁移源码:对于自己编写的代码,直接改用 SLF4J API,而非依赖桥接。逐步替换。

2026-06-23 09:54:20 328

原创 深入理解 SLF4J:Java 日志的终极门面

SLF4J 作为 Java 日志领域的标准门面,以其简单、灵活、高性能的特点赢得了广泛的认可。它解耦了日志 API 与实现,让开发者专注于业务代码,让运维灵活掌控日志配置。无论你是做应用开发还是框架编写,掌握 SLF4J 都是必备技能。希望本文能帮助你深入理解 SLF4J,并在实际项目中用好这个强大的工具。如果你想了解更多细节,可以查阅官方用户手册,那里有更完整的说明和故障排除指南。(本文基于 SLF4J 2.0.18 编写,确保信息最新准确。

2026-06-23 09:53:44 347

原创 告别“在我电脑上能跑”——用 Vagrant 一键搭建可复现的开发环境

文章摘要本文是一篇全面的 Vagrant 入门与实践指南,通过一个真实的 Web 应用Terramino演示了 Vagrant 的核心功能。Vagrant 解决的问题:解决传统开发环境中的“在我电脑上能跑”问题,通过“环境即代码”实现环境一致性、可移植性和隔离性。安装与基础使用:详细介绍了 Vagrant 和 VirtualBox 的安装步骤,以及如何通过vagrant up等命令创建和管理第一个虚拟机环境。自动化配置(Provisioning)

2026-06-22 17:25:42 450

原创 Java SAX 流式解析全解:从原理到 EasyExcel 实战

SAX 是一种基于事件驱动的 XML 解析 API。它不构建完整的文档树,而是像流水线一样顺序读取 XML 文件,每遇到一个 XML 结构(开始标签、文本、结束标签、属性等)就回调开发者定义的处理器方法。// SAX ContentHandler 典型回调示例与之相对的是,它会将整个 XML 文档加载到内存中,生成一棵对象树,允许任意遍历和修改。SAX 的核心价值在于“用编程复杂度换取内存与速度”。在需要处理超大 XML(或类 XML 结构,如 xlsx、docx)的场景下,它几乎是唯一可行的方案。

2026-06-15 10:26:37 504

原创 18 Byte Buddy 进阶:揭秘方法委托中的“歧义解析”机制

如果默认的 4 条规则无法满足你的奇葩需求(比如你想根据方法上的自定义注解来选择),你可以实现接口。// 自定义逻辑:例如,优先选择带有 @AdminOnly 注解的方法 for(Resolution candidate : candidates) {// 直接选中 } } // 否则返回 null,交给下一个解析器处理 return null;

2026-03-16 18:45:21 577

原创 18 Byte Buddy 进阶指南:解锁 `@Pipe` 注解,实现灵活的方法转发

Pipe// 模拟一个简单的数据库服务 class MemoryDatabase {// 模拟耗时操作 try {} }// 模拟一个简单的数据库服务 class MemoryDatabase {// 模拟耗时操作 try {} }List;// 模拟一个简单的数据库服务 class MemoryDatabase {// 模拟耗时操作 try {} }ArrayList;// 模拟一个简单的数据库服务// 模拟耗时操作@Pipe。

2026-03-16 17:11:27 554

原创 18 Byte Buddy 进阶指南:优雅调用接口默认方法 (@DefaultCall)

*** 场景一:强制调用 ServiceA 的默认方法* 即使 MyService 重写了 log,这里也能通过 targetType 找回 ServiceA 的默认逻辑} /*** 场景二:强制调用 ServiceB 的默认方法} /*** 场景三:如果不想指定 targetType,且方法本身就是默认方法的直接实现(未重写)* 注意:对于 MyService 这种重写了的情况,不加 targetType 可能会导致绑定失败或调用的是 super (如果存在)} }

2026-03-16 15:20:02 577

原创 17 深入理解 Byte Buddy @Super:是“父类代理”而非“父类实例”

/ 普通虚方法 (可被重写)// Final 方法 (不可被重写)// Private 方法 (不可见)/**/*** 拦截逻辑* @param origin 原始方法信息* @param allArgs 所有参数* @param zuper 原始方法的调用句柄。

2026-03-13 13:42:01 524

原创 12 Byte Buddy 进阶指南:如何动态定义全新方法与字段

重写 (Override):针对父类或接口中已存在的方法进行修改。定义 (Define):创建一个全新的方法或字段,它在父类中并不存在。Byte Buddy 允许你通过和API 轻松实现后者。你可以使用来声明一个新方法,指定其名称、返回类型、参数列表和可见性。定义完成后,必须立即通过提供具体的实现逻辑。与方法不同,字段的处理逻辑要简单得多。方法定义的时序敏感后立即intercept是标准动作。警惕:后续注册的匹配器可能会“误伤”你刚定义的新方法。对策。

2026-03-12 13:25:49 265

原创 ByteBuddy系列文章目录

系列文章目录系列文章目录。

2026-03-12 09:26:37 268

原创 11 ByteBuddy 泛型深坑:为什么名字相同的 `T` 却不是同一个类型?

ByteBuddy 文档中提到的机制,是其在处理泛型时最核心的智能特性之一。核心认知:泛型类型变量(TE等)不是全局唯一的,它们是上下文相关的。跨类复用泛型类型时,必须更新其绑定的上下文。自动修复:当你传入一个包含类型变量的Type对象给 ByteBuddy 时,它不会盲目复制,而是会自动识别并将其重绑定到新生成类或方法的上下文中。开发者收益:你不需要关心字节码中复杂的常量池索引、签名属性格式或类型变量表。你只需要关注业务逻辑,ByteBuddy 会保证生成的字节码在泛型层面是严格合法的。

2026-03-11 16:56:00 237

原创 08 ByteBuddy 进阶:Manifest 加载策略——用内存换“后悔药”?

ByteBuddy 的 Manifest 版本是一个强大的“后悔药”,它让动态类在加载后依然保留了“肉身”(字节码)。核心建议默认忽略:95% 的场景下,你只需要操作Class对象,不需要原始字节码。请坚持使用普通的WRAPPER策略。按需开启:只有当你明确调用了且期望得到非空结果时,才切换到*_MANIFEST版本。警惕内存:使用 Manifest 版本时,务必监控 JVM 堆内存使用情况,避免因为动态类过多而导致 OOM。认清局限。

2026-03-11 15:21:04 303

K8S安装以及基础知识的学习

K8S学习笔记

2023-08-20

Quartz2.2.2版本发布包脚本定义

Quartz发布包

2023-07-28

examples.zip

MySQL学习系列SQL案例

2022-01-03

Spring Boot整合Druid Demo项目代码包

Spring Boot整合Druid Demo项目源代码,同时整合了MyBatis,以及实现动态的数据源、Druid连接池的监控。

2020-03-03

simpe-demo-diffdb.7z

该项目包含了动态数据源、兼容Oracle/MySQL数据库、同时通过MyBatis-PageHelper、MyBatis-Plus解决多数据库分页的问题

2020-11-10

动态多数据源示例代码

本项目由SpringBoot+MyBatis+Druild组成,主要关于多数据的动态配置,以及多数据源的配置。用于通过前端请求自由切换数据源,切换数据源的同时也动态执行不同的SQL

2020-11-04

Spring Boot中整合MyBatis

关于SpringBoot中如何配置数据层MyBatis,以及多数据源的配置,多个数据层mapperInterface和xml文件路径的配置源码

2020-04-01

dubbo-thought.7z

Java SPI 机制与 Dubbo SPI 机制的一些说明与测试代码 方便SPI的学习 该项目来自于享学课堂学习资料 请勿随意商业使用

2020-02-22

编程式创建Aspect代理源码

编程式创建Aspect代理源码 You can use the org.springframework.aop.aspectj.annotation.AspectJProxyFactory class to create a proxy for a target object that is advised by one or more @AspectJ aspects.

2020-05-27

Spring Boot中整合MyBatis

关于SpringBoot中如何配置数据层MyBatis,以及多数据源的配置,多个数据层mapperInterface和xml文件路径的配置源码

2020-04-01

springcloud.zip

Spring Cloud 微服务源码:分为用户微服务、课程微服务、网关微服务,通过consul实现了服务发现组件和配置服务器,外面的请求通过网关打进来,微服务之间通过轻量级通信机制,包括http和rabbitmq,微服务之间有一定的认证与授权机制,从而保证安全,对于高并发的应用,通过集成Resilience4j,从而提升应用的可用性。

2020-03-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除