主页

【理解Spring】系列前言

在开发中,Spring 是我使用最多的框架,故而对它进行更深入的学习,可以更快的实现想要的功能,同时写出更优雅的代码。 基于 Spring Framework 5.3.10-SNAPSHOT 学习,后续博文内容对应此版本 核心原理 [[Spring核心接口]] BeanDefinition 抽象 BeanDefinition BeanFactory ApplicationContext BeanPostProcessor FactoryBean Spring启动 Spring扫描 Spring初始化所有非懒加载单例Bean ...

阅读更多

订阅 Google AI Pro 会员教程

近期 Google 在 X 平台(原 Twitter)的 @GeminiApp 官方账号宣布了一项限时优惠活动:Google AI Pro 年度计划享受 50% 折扣,年费仅需 $99.99(原价 $199.99)。 记录一下在国内环境下成功订阅 Google AI Pro 年度会员的完整流程。 遇到的问题 最初尝试使用美区 Google 账户直接在网页端购买,但在添加支付方式时遇到了问题:添加国内招商银行 Visa 卡失败。 后偶然发现可以通过 App Store 进行支付,从而绕过直接绑定信用卡的限制。 解决方案 通过 Apple 生态系统完成订阅,具体流程如下: 1. 准备美区 Apple 账号余额 由于需要在美区 App Store 进行支付,首先需要为美区 A...

阅读更多

Proxmox VE 9.1.1 屏蔽订阅弹窗提示

Proxmox VE (PVE) 是一款优秀的开源虚拟化管理平台,基于 Debian 并集成了 KVM 和 LXC 虚拟化技术。然而,在使用社区版时,每次登录 Web 管理界面都会弹出订阅提示窗口,虽然不影响功能使用,但频繁出现确实会影响使用体验。 本文将介绍如何在 Proxmox VE 9.1.1 版本中屏蔽这个登录后的订阅提示弹窗。 操作步骤 1. 备份原始文件 在进行任何修改之前,强烈建议先备份原始的 JavaScript 文件,以便在出现问题时能够快速恢复: cp /usr/share/pve-manager/js/pvemanagerlib.js \ /usr/share/pve-manager/js/pvemanagerlib.js.bak 这条命令会在...

阅读更多

kiss-translator(简约翻译)配置 Gemini AI Studio

由于沉浸式翻译 最近出现了许多负面消息,于是尝试寻找替代品。 看到有推荐 kiss-translator 于是尝试使用。 由于默认的 Gemini 配置与 Gemini AI Studio 不兼容,于是摸索在自定义接口中配置。 在【接口设置】中,点开一个Custom,接口名称填一个易于分别的名字。 URL填写:https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-lite:generateContent 如果是自搭建的 GeminiBalance,填写 http://ip:port/v1beta/models/gemini-2.5-flash-lite:generateContent ...

阅读更多

【Spring实战】动态获取Bean

在开发中,常常会定义接口,后对接口进行实现。实现的方式可能有一种,也可能有多种,在不同的场景,需要调用不同的实现。 例如 public interface Azh3ngService { void foo(); } public class AaAzh3ngServiceImpl implements Azh3ngService { @Override public void foo() { System.out.println("aa"); } } public class BbAzh3ngServiceImpl implements Azh3ngService { @Override public void foo(...

阅读更多

【Spring实战】@Qualifier 注解的使用

在使用 Spring 的过程中,当需要进行依赖注入时,往往会选用 @Autowired 注解进行自动装配,如果被 @Autowired 注解的类在 Spring 中有多个 Bean,则通过变量名称选取合适的 Bean,例如: @Component public class FooService implements BaseService { } @Component public class BarService implements BaseService { } @Component public class SomeBean { @Autowired private BaseService barService; // 根据变量名称会找到 BarServi...

阅读更多

【理解Spring】事务

在 Spring 中,事务有两种实现方式: 编程式事务管理:编程式事务管理使用 TransactionTemplate 可实现细粒度的事务控制 声明式事务管理:基于 Spring AOP 实现。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务 开发中更常使用声明式事务,因为不会入侵代码,通过 @Transactional 注解即可以完成事务管理 声明式事务基于 Spring AOP 实现:向 Spring 中添加 BeanPostProcessor 扫描被 @Transactional 注解的类,生成代理对象,通过代理对象完成事务管理 使用示例 编程式事务使用示例 使用 TransactionTe...

阅读更多

【理解Spring】TargetSource

org.springframework.aop.TargetSource TargetSource的使用 在 Spring AOP 中,通常被代理对象就是 Bean 对象,由 BeanFactory 创建。 同时 Spring AOP 中提供了 TargetSource 接口,可以自定义逻辑创建被代理对象。例如 @Lazy 注解,当加在属性上时,会产生一个代理对象赋值给这个属性,产生代理对象的代码为: org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver#buildLazyResolutionProxy public class ContextAnnotationAutowi...

阅读更多