
springboot
文章平均质量分 67
wddblog
擅长主流开发技术 项目技术新
商业软件定制开发,资深团队,品质保证
远程部署调试,运行安装。
部分源码免费提供。
展开
-
解释RocketMQ的“消息顺序”特性
要实现顺序消息,Producer(生产者)在发送消息时需要设置一个MessageQueueSelector(消息队列选择器),以便将一组有顺序的消息依次发送到对应Topic下的同一个MessageQueue(消息队列)上。然而,值得注意的是,RocketMQ的顺序消息机制只保证一组消息的局部有序性,而并不保证所有消息的全局有序性。这一特性对于某些特定的应用场景至关重要,比如金融交易、订单处理等,在这些场景中,消息的顺序性对于业务逻辑的正确性有着决定性的影响。原创 2024-04-19 19:28:04 · 326 阅读 · 0 评论 -
HttpServletResponse HttpServletRequest
和是 Java Servlet API 中的两个核心接口,它们分别代表了 HTTP 响应和 HTTP 请求。在基于 Java 的 Web 应用中,特别是使用 Servlet 技术时,这两个接口被广泛应用。原创 2024-04-17 20:45:43 · 526 阅读 · 0 评论 -
使用 `FilterRegistrationBean` 注册 Filter 的简单示例
时,你通常会创建一个它的实例,并设置相关的属性,然后将这个实例作为一个 bean 注册到 Spring 的应用上下文中。Spring 容器在启动时会自动处理这个 bean,并将对应的 Filter 注册到 Servlet 容器中。来定义 Filter 的细节,比如它的 URL 映射、初始化参数、异步支持等,然后将它注册到 Servlet 容器中。是 Spring Framework 提供的一个类,它用于在 Servlet 容器中注册一个。在 Spring Boot 应用中,你可以使用。原创 2024-04-17 20:43:06 · 1271 阅读 · 0 评论 -
localhost 和 127.0.0.1 区别
总的来说,`localhost` 和 `127.0.0.1` 都可以用来指向本地计算机,但它们在实际使用中可能会因为场景的不同而有所偏好。由于它是一个IP地址,所以在需要指定具体IP地址的场景中,如网络工具的配置和网络协议的测试,`127.0.0.1` 会是更合适的选择。- `localhost` 在所有操作系统和环境中都是有效的,并且通常都会解析到 `127.0.0.1`。- `127.0.0.1` 作为一个IP地址,也是普遍认可的,并且在任何支持IPv4的系统中都是有效的。原创 2024-04-02 18:46:41 · 643 阅读 · 0 评论 -
运行时异常(RuntimeException)
为了避免这些异常,程序员应该仔细检查和验证输入参数、确保不访问无效索引、正确处理并发修改等问题,并在必要时使用适当的同步和错误处理机制。块来捕获并处理这些异常,或者通过在设计API和方法时考虑到可能的异常情况,并提前通知调用者。尽管运行时异常不需要在方法签名中显式声明,但良好的编程实践仍然建议对可能抛出这些异常的代码进行适当的异常处理。:当向缓冲区写入数据时,如果此操作使得缓冲区的位置大于其容量,就会抛出此异常。:当从缓冲区读取数据时,如果此操作使得缓冲区的位置小于0,就会抛出此异常。原创 2024-04-01 19:48:00 · 829 阅读 · 0 评论 -
讲讲你对TransmittableThreadLocal的理解
是Java提供的一个线程局部变量类,它可以为每个使用该变量的线程提供一个独立的变量副本,从而确保每个线程都可以独立地改变自己的副本,而不会影响其他线程。是一个强大的工具,它解决了在多线程编程中线程局部变量在线程池中的传递问题。当线程从线程池中获取并执行任务时,由于线程是复用的,所以。变量,然后在任务执行前将这些变量恢复到执行任务的线程中,任务执行完毕后,再恢复之前备份的。,主要解决了在多线程编程中,线程局部变量在线程池中的传递问题。的实现原理主要是通过包装线程池中的任务,在任务执行前后对。原创 2024-04-01 19:46:52 · 677 阅读 · 0 评论 -
Dubbo 几种方式来传递和使用隐式参数
在 Dubbo 中,隐式参数通常指的是那些不直接作为 RPC 方法参数传递,但需要在 RPC 调用过程中共享或传递的信息。这些信息可能包括用户身份、请求标识、认证令牌等。Dubbo 提供了几种方式来传递和使用这些隐式参数。原创 2024-03-30 08:01:50 · 1280 阅读 · 0 评论 -
阻塞队列(Blocking Queue)是一个支持两个附加操作的队列
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。这些只是阻塞队列的一些应用场景,实际上,只要是需要处理并发任务或异步消息的场景,都可以考虑使用阻塞队列来提高系统的性能和可靠性。阻塞队列(Blocking Queue)是一个支持两个附加操作的队列。当队列已满时,尝试添加元素的线程也将等待队列出现空闲空间。在队列为空时,获取元素的线程将会等待队列变为非空;包下提供了几种阻塞队列的实现,如。原创 2024-03-29 09:09:00 · 417 阅读 · 0 评论 -
CyclicBarrier
这个类特别适用于固定大小的线程组,在这些线程组中,线程需要不时地互相等待。CyclicBarrier的主要应用场景包括多线程计算数据,最后合并计算结果的场景。例如,在需要计算多个人在一定时间内的工资详细时,可以将线程分配给每个人,每个线程计算其工资,最后使用CyclicBarrier的Runnable功能将各个线程的计算结果进行整合,得出最终结果。CyclicBarrier的实现原理是基于ReentrantLock和Condition的,它使用一个计数器来记录到达屏障点的线程数量。原创 2024-03-28 11:20:49 · 269 阅读 · 0 评论 -
讲讲你对CountDownLatch的理解
是 Java 并发包中的一个类,它允许一个或多个线程等待其他线程完成操作。的工作原理是,它维护了一个计数器,这个计数器的初始值由构造函数设置。每当一个线程完成其任务后,计数器的值就会减一。当计数器的值减至零时,所有因调用await()方法而等待的线程都会被释放,继续执行。以下是。原创 2024-03-28 11:10:38 · 501 阅读 · 0 评论 -
Dubbo消费者配置
如果在XML中配置了某项,那么dubbo.properties中的相应配置项将无效。在Dubbo框架中,消费者配置通常通过XML配置文件完成,如dubbo-consumer.xml。此外,你还可以在这里配置特定的消费者属性,如负载均衡策略、超时时间等。这包括注册中心的地址、协议等。:方法配置,用于为特定的服务方法指定配置信息。:协议配置,虽然这通常在服务提供者端配置,但在某些情况下,消费者端也可能需要指定协议信息。最后,确保你的消费者应用能够正确地加载这个配置文件,并启动Dubbo消费者来消费服务。原创 2024-03-27 19:34:01 · 682 阅读 · 0 评论 -
equals 与==区别
操作符在 Java 中用于比较两个对象的引用是否相同,即它们是否指向内存中的同一个对象。注意:对于 Integer 类型,Java 缓存了 -128 到 127 之间的对象,所以在这个范围内的 Integer 对象使用。但超出这个范围的 Integer 对象,即使值相等,引用也不一定相等。是 Object 类的一个方法,用于比较两个对象的内容是否相等。如果只需要比较对象的引用是否相同,或者比较基本数据类型的值,可以使用。在自定义类中,如果需要比较对象的内容是否相等,通常需要重写。用于比较它们的值是否相等。原创 2024-03-26 21:20:15 · 371 阅读 · 0 评论 -
spring缓存通用配置
当你在配置类上添加这个注解时,Spring会自动检测并应用缓存相关的注解,如@Cacheable, @CacheEvict等。它还会触发缓存的初始化过程,包括创建缓存管理器、缓存解析器等。这些组件共同构成了Spring的缓存抽象体系,使得开发者可以方便地实现声明式缓存,提高应用的性能和响应速度。实现这个接口的bean会被Spring识别,并用于配置缓存管理器、缓存解析器等组件。通过它,你可以为类中的所有缓存操作指定默认的缓存名称、key生成策略等,避免在每个方法上都重复配置。原创 2024-03-26 21:13:39 · 903 阅读 · 3 评论 -
AuditAutoConfiguration 和 AuditEventsEndpointAutoConfiguration 审计功能相关的自动配置类
和是 Spring Boot 中与审计功能相关的自动配置类。Spring Boot 提供了对 Spring Security 的审计事件的自动配置支持,以便用户可以轻松地集成和暴露审计事件。原创 2024-03-25 14:18:10 · 565 阅读 · 0 评论 -
RabbitTemplate :简化与 RabbitMQ 消息代理的交互
是 Spring AMQP 提供的一个高级消息模板,它封装了与 RabbitMQ 服务器交互的底层细节,使得开发者能够以一种更加声明式的方式发送和接收消息。通过,我们可以发送消息到指定的交换机和队列,也可以从队列中接收消息。是 Spring AMQP 中一个非常重要的类,它简化了与 RabbitMQ 消息代理的交互过程,使得开发者能够更加方便地发送和接收消息。通过合理配置和使用,我们可以构建高效、可靠的消息传递系统,以满足各种业务场景的需求。原创 2024-03-22 17:53:37 · 1273 阅读 · 0 评论 -
`WebArgumentResolver`、`WebBindingInitializer`、`WebDataBinderFactory`、`WebExchangeDataBinder`
这些组件和接口共同构成了Spring框架中Web层的数据绑定和处理机制。它们允许开发者通过自定义和扩展来灵活地控制请求参数的解析、数据绑定的过程以及数据校验等。通过合理使用这些组件和接口,开发者可以构建出高效、健壮的Web应用程序。在实际应用中,可以根据项目的具体需求选择合适的组件和接口进行使用。例如,如果需要处理复杂的对象绑定或自定义数据校验逻辑,可以实现或接口;如果需要控制数据绑定的创建过程,可以提供自定义的实现。原创 2024-03-22 17:47:33 · 306 阅读 · 0 评论 -
`RequestAttribute`、`RequestBody`、`RequestHeader`、`RequestMethod`、`RequestParam`和`RequestPart
在Spring框架中,特别是在Spring MVC中,和等注解用于处理HTTP请求的不同部分,并帮助开发者从请求中提取信息或绑定请求体到Java对象。原创 2024-03-21 22:08:42 · 490 阅读 · 0 评论 -
PostMapping、PutMapping、GetMapping、DeleteMapping 和 RequestMapping
这些注解是 Spring Web 框架中非常重要的组成部分,它们大大简化了处理 HTTP 请求的过程。通过使用这些注解,开发者可以清晰地定义他们的控制器方法应该响应哪些请求,以及如何响应这些请求。这不仅提高了代码的可读性和可维护性,还使得开发者能够更专注于业务逻辑的实现,而不是处理底层的 HTTP 请求细节。在实际开发中,根据具体的业务需求和场景,选择合适的注解和配置是非常重要的。同时,也需要考虑到安全性、性能、错误处理等方面的问题,以确保应用程序的稳定性和可靠性。原创 2024-03-21 20:32:31 · 2667 阅读 · 1 评论 -
WebFluxAutoConfiguration、WebFluxProperties 和 WebFluxRegistrations
自动配置是 Spring Boot 的核心特性之一,它简化了应用的配置过程,使得开发者只需添加必要的依赖和配置一些属性,就能获得一套完整的、生产就绪的配置。它们通过灵活的配置和自动配置功能,简化了应用的配置过程,并提高了应用的健壮性和可维护性。是 Spring Boot WebFlux 模块中的关键组件,它们通过自动配置、属性绑定和组件注册等功能,为开发者提供了强大且灵活的响应式 Web 开发支持。开发者可以通过继承或自定义这些类,来添加或覆盖默认的配置和组件注册逻辑,以适应更复杂的应用场景。原创 2024-03-20 20:02:59 · 378 阅读 · 0 评论 -
ReactiveMultipartProperties 和 ReactiveMultipartAutoConfiguration 用于处理响应式多部分(Multipart)请求的配置类和属性类
这是 Spring Boot 的自动配置类,用于在检测到相应的类路径或条件时自动配置响应式多部分处理。自动配置是 Spring Boot 的一个核心特性,它允许开发者通过简单的依赖添加和属性配置,就能获得一套完整的、生产就绪的配置。在 Spring WebFlux 的上下文中,它们提供了对多部分请求(通常用于文件上传)的自动配置和定制。是 Spring Framework 中用于处理响应式多部分请求的关键组件,它们通过提供灵活的配置和自动配置功能,简化了开发者的工作,并提高了应用程序的健壮性和可维护性。原创 2024-03-20 20:00:11 · 379 阅读 · 0 评论 -
AutoConfigurationImportEvent、AutoConfigurationImportFilter、AutoConfigurationImportListener
和共同构成了 Spring Boot 自动配置机制的核心组件。它们协同工作,使得开发者能够更精细地控制自动配置的行为,以满足项目的特定需求。通过定制这些组件,开发者可以排除不必要的自动配置、添加自定义的自动配置类或在自动配置导入过程中执行自定义逻辑。这些功能使得 Spring Boot 应用更加灵活和可定制,提高了开发效率和应用的稳定性。原创 2024-03-19 07:00:27 · 639 阅读 · 0 评论 -
AutoConfigurationExcludeFilter :定制自动配置的行为
是 Spring Boot 中一个非常有用的工具,它允许你根据特定的条件排除自动配置类,从而实现更精细的控制和定制。通过合理使用,你可以避免不必要的 Bean 创建、解决冲突,并定制自动配置的行为以满足项目的具体需求。然而,在使用时需要注意明确排除的原因和潜在影响,并遵循最佳实践来确保应用的稳定性和可维护性。原创 2024-03-19 06:57:07 · 819 阅读 · 0 评论 -
MongoReactiveSessionConfiguration配置基于 MongoDB 的响应式(Reactive)会话管理
提供了足够的灵活性,允许你根据需要进行自定义和扩展。自定义序列化策略:你可以提供自定义的序列化器来序列化会话对象,以适应特定的数据存储需求。会话超时设置:你可以设置会话的最大不活动时间(超时时间),以确保过期会话能够被自动清理。集成 Spring Security:你可以将 MongoDB 响应式会话与 Spring Security 集成,以提供安全的用户认证和授权机制。是 Spring Session 项目中用于配置基于 MongoDB 的响应式会话管理的关键类。原创 2024-03-18 13:04:52 · 679 阅读 · 0 评论 -
RedisReactiveSessionConfiguration 配置基于 Redis 的响应式(Reactive)会话管理
随着 Spring WebFlux 的兴起,越来越多的开发者开始构建响应式 Web 应用程序。响应式编程模型允许非阻塞的、基于事件的数据处理,这对于处理大量并发请求和构建高性能的 Web 应用非常有利。然而,传统的会话管理方式(如基于 Servlet 的会话管理)并不适合响应式编程模型。因此,Spring Session 项目应运而生,为 Spring WebFlux 提供了会话管理的解决方案。是 Spring Session Redis 模块中的一个关键类,它负责配置基于 Redis 的响应式会话。原创 2024-03-18 12:59:02 · 1615 阅读 · 1 评论 -
AutoConfigureBefore、AutoConfigureAfter、AutoConfigureOrder 和 AutoConfigurationSorter
通过正确地使用它们,可以确保你的自定义自动配置或第三方库的自动配置在 Spring Boot 的内置自动配置之前或之后加载,以满足特定的需求。Spring Boot 的自动配置功能使得开发者无需手动配置许多常见的组件,而这些工具则提供了额外的灵活性来定制自动配置的加载顺序。例如,如果你有一个自定义的自动配置类,并且你想要确保它在 Spring Boot 的某个内置自动配置类之前加载,你可以使用。注解对自动配置类进行排序。它确保了在 Spring Boot 的自动配置阶段,自动配置类按照预期的顺序加载。原创 2024-03-17 21:43:45 · 846 阅读 · 0 评论 -
ApplicationListener 注册监听器来监听应用程序中发布的事件
是 Spring 框架中的一个接口,它定义了一个处理应用程序事件的方法。当一个事件被发布时,所有注册了对应事件的都会被通知,并调用其方法来处理这个事件。这个接口通常用于实现自定义的事件监听器,以便在特定事件发生时执行相应的操作。例如,你可以创建一个监听器来监听,当 Spring 应用上下文刷新完成时执行一些初始化操作。是 Spring 框架中一个强大的工具,它提供了一种灵活且解耦的方式来处理应用程序中的事件。通过定义事件和创建监听器,你可以实现复杂的业务逻辑和跨组件通信。原创 2024-03-17 21:39:14 · 544 阅读 · 0 评论 -
maven-compiler-plugin是Maven项目构建工具中的一个重要插件
然而,对于特定的项目需求,可能需要调整编译器的配置,这时就可以通过配置maven-compiler-plugin来实现。总之,maven-compiler-plugin是Maven项目构建中不可或缺的一个插件,通过合理的配置和使用,可以确保项目的顺利编译和运行。对于开发人员来说,了解和掌握maven-compiler-plugin的使用方法和配置技巧是非常重要的。此外,maven-compiler-plugin还提供了其他高级功能,如多源目录编译、多编译器支持等,可以根据项目的具体需求进行配置和使用。原创 2024-03-16 13:05:31 · 3085 阅读 · 0 评论 -
GatewayProperties:深入探索Spring Cloud Gateway的核心配置属性
是Spring Cloud Gateway中的一个关键配置类,它定义了网关所需的各种配置属性。通过配置这些属性,开发者可以定制网关的行为,满足不同的业务需求。:这是一个路由定义的列表,每个路由都包含一个唯一的ID、目标URI、断言和过滤器列表等属性。中的路由配置部分包含了路由的ID、目标URI、断言(匹配条件)和过滤器列表等属性。中的各项属性,开发者可以打造出安全、高效、可维护的API网关,为微服务架构提供强有力的支持。通过深入理解和合理配置。是一个核心的配置类,它负责管理和维护网关的各项配置属性。原创 2024-03-16 09:01:47 · 962 阅读 · 0 评论 -
@SpringBootApplication :简化 Spring Boot 项目的配置和初始化过程
注解是 Spring Boot 框架的核心特性之一,它极大地简化了 Spring 应用程序的配置和启动过程。通过合理使用该注解及其定制选项,开发者可以创建出高效、稳定且易于维护的 Spring Boot 应用程序。同时,遵循最佳实践和注意事项,能够进一步提高开发效率和代码质量。在未来的开发中,随着 Spring Boot 的不断演进和社区的不断壮大,`原创 2024-03-15 20:16:03 · 1430 阅读 · 0 评论 -
RestController:Spring Framework 中用于创建 RESTful Web 服务的注解
是 Spring Framework 中用于构建 RESTful Web 服务的核心注解之一。它简化了 RESTful API 的开发过程,使得开发者能够更专注于业务逻辑的实现。通过合理使用和其他 Spring Web 提供的特性,我们可以构建出高效、稳定、易用的 RESTful Web 服务,满足各种复杂的业务需求。在使用时,我们需要注意保持 URL 路径的简洁和一致性,合理处理异常,使用 DTO 进行数据传输,以及遵循其他最佳实践。原创 2024-03-15 19:55:04 · 864 阅读 · 0 评论 -
AuthenticationEntryPoint:实现自定义的未授权访问处理逻辑
是一个接口,它用于定义当用户尝试访问受保护的资源但没有进行身份验证时应该执行的操作。当用户未通过身份验证就尝试访问安全资源时,Spring Security会调用。现在,当用户尝试访问需要身份验证的资源但未通过身份验证时,Spring Security将使用我们自定义的。方法被重写以设置响应的状态码为401,并附带一条错误消息"Unauthorized access"。的实现来启动身份验证过程或提供有关未授权访问的反馈。下面是一个简单的示例,展示了如何实现一个自定义的。的bean,并将其设置为。原创 2024-03-14 11:30:00 · 3513 阅读 · 0 评论 -
GlobalExceptionHandler全局异常处理器的设计
GlobalExceptionHandler是Java Web开发中一个重要的概念,它允许我们集中处理应用程序中的异常,并提供统一的错误响应。通过合理设计和实现GlobalExceptionHandler,我们可以简化异常处理逻辑、提高用户体验、增强系统稳定性。在实际开发中,我们应该根据项目的需求和特点来定制GlobalExceptionHandler的实现方式,以满足项目的特定要求。原创 2024-03-14 07:30:00 · 1213 阅读 · 0 评论 -
@ConfigurationProperties 的基本用法
在注解中,你可以通过prefix属性指定配置属性的前缀。这样,Spring Boot 就会自动匹配该前缀下的所有属性,并将它们绑定到对应的字段上。同时,你也可以通过其他方式(如)指定配置文件的位置。有时,配置文件中的属性名可能与 JavaBean 的字段名不完全匹配,或者你可能需要应用一些自定义的转换逻辑。在这种情况下,你可以使用注解或自定义的Converter类来定义自己的属性绑定规则。原创 2024-03-13 11:48:26 · 2438 阅读 · 0 评论 -
AccessDeniedHandler 处理当访问被拒绝时的逻辑
是 Spring Security 中处理访问被拒绝情况的关键组件。通过实现和配置这个接口,开发者可以定义自己的访问被拒绝处理逻辑,从而增强应用的安全性和用户体验。无论是重定向用户、记录日志还是执行其他操作,都提供了一个灵活且强大的机制来实现这些功能。原创 2024-03-11 22:09:12 · 2062 阅读 · 0 评论 -
OncePerRequestFilter 过滤器中的 doFilterInternal 方法只会被调用一次
是 Spring Framework 中一个强大的工具,用于确保在单个 HTTP 请求的生命周期内,过滤器的特定逻辑只被执行一次。通过避免不必要的重复执行,它提高了应用的性能和可靠性,并简化了开发过程。在构建复杂的 Web 应用时,考虑使用来优化你的过滤器逻辑。原创 2024-03-11 22:05:25 · 1861 阅读 · 0 评论 -
MyBatis-Plus IgnoreStrategy:深入解析与策略应用
MyBatis-Plus,作为MyBatis的增强工具,不仅简化了开发者的日常开发工作,而且通过一系列的策略和机制,让开发者能够更加灵活地处理数据库操作。其中,是MyBatis-Plus中用于处理实体类字段与数据库表字段映射关系的一个重要策略。本文将深入解析的概念、作用、使用方式以及在实际开发中的应用策略。原创 2024-03-09 11:45:00 · 1183 阅读 · 0 评论 -
MyBatis-Plus BaseMapper MyBatis 的一个增强工具
当开发者使用 MyBatis-Plus 时,只需要让自己的 Mapper 接口继承 BaseMapper,就可以直接使用这些已经定义好的方法,而无需再手动编写对应的 SQL 语句和 MyBatis 的映射配置。总的来说,MyBatis-Plus 的 BaseMapper 大大简化了 MyBatis 的开发过程,提高了开发效率,同时也保持了 MyBatis 的灵活性和可扩展性。:虽然 BaseMapper 提供了很多通用的方法,但对于一些复杂的数据操作,仍然需要开发者编写自定义的 SQL 语句和映射配置。原创 2024-03-09 07:45:00 · 953 阅读 · 0 评论 -
MyBatis BaseMapper:深入解析与应用
BaseMapper通常是一个接口,其中定义了一系列基本的数据库操作方法,如selectByIdinsertupdateByIddeleteById等。通过使用 MyBatis 的动态 SQL 功能,这些方法的实现可以自动地根据传入的参数生成相应的 SQL 语句。BaseMapper减少重复代码:开发者不必为每个实体类编写重复的 CRUD 方法,从而降低了维护成本。提高开发效率:由于大部分基本的数据库操作都被封装在BaseMapper中,开发者可以专注于业务逻辑的实现。统一接口规范。原创 2024-03-08 11:45:00 · 1033 阅读 · 0 评论 -
MyBatis PostInitTableInfoHandler: 深入解析
是 MyBatis 中的一个接口,它允许开发者在 MyBatis 初始化表信息之后执行自定义的逻辑。这个接口通常与 MyBatis 的内部元数据处理相关,例如在加载映射文件或解析数据库元数据后执行某些操作。原创 2024-03-08 07:45:00 · 406 阅读 · 0 评论 -
MyBatis EnumTypeHandler:优雅地处理枚举类型
在数据库与 Java 对象之间映射时,枚举类型的处理往往是一个常见的挑战,因为数据库通常存储的是枚举值的名称或者序号,而 Java 枚举对象则需要将这些值映射到具体的枚举实例上。是 MyBatis 中一个重要的类型处理器,它提供了一种优雅且高效的方式来处理 Java 枚举类型与数据库之间的映射。元数据(如枚举常量的名称或序号),将数据库中的值映射到相应的枚举实例上。,我们可以轻松地将数据库中的值映射到 Java 枚举实例上,或者将 Java 枚举实例映射到数据库能够识别的值上。在实际项目中,合理地使用。原创 2024-03-07 11:45:00 · 1547 阅读 · 0 评论