Spring创建Bean失败排查:BeanCreationException根因分析与解决实践
Error creating bean with name xxx... 这一行红字几乎是每个用Spring写后端的人都会在启动控制台里撞见的画面。我这些年帮同事排查、也自己在项目里踩见过太多人一看到这句话就CtrlF搜Bean名字然后从类头翻到类尾折腾半小时没头绪。其实这条报错本质上只是个包装层真正的原因永远藏在后面跟着的Caused by里。如果你能先搞清楚这条报错是从哪一步抛出来的、分几种典型形态、各自怎么定位那么绝大多数创建Bean失败都能在几分钟内解决。这篇文章我就从实际排查的角度把Spring容器创建Bean失败这事完整拆一遍。不讲那种看报错猜答案的零散技巧而是先给到排查链路再按高频成因逐个拆解最后聊聊怎么从代码习惯上降低这类报错的概率。1. 认识这条报错的真实身份BeanCreationException从哪里来不少人都把Error creating bean当成一个具体错误其实它是一个统称。Spring容器在创建任何一个Bean的任何一个环节里抛出的异常最终都会包装成BeanCreationException层层往上抛直到中断整个容器启动流程。所以看懂这条报错的第一步是搞清楚Bean从定义到可用的完整生命周期。1.1 从Bean的生命周期看懂报错产生的六个节点一个Bean在Spring容器里从定义到可用大致要经过这么几步阶段关键行为抛出常见异常的环节1. 实例化前执行InstantiationAwareBeanPostProcessor后置处理器内代码异常2. 实例化通过构造器创建原始对象构造器报错、构造器参数缺失3. 属性填充执行依赖注入Autowired、Resource、setter等找不到依赖Bean、注入歧义4. Aware回调注入BeanName、ApplicationContext等返回空值或类型不符5. 初始化前PostConstruct、BeanPostProcessor前置方法初始化方法内抛NPE6. 初始化后InitializingBean.afterPropertiesSet、init-method、代理增强代理生成失败、条件不满足报错信息里出现的BeanName只是责任主体也就是正在创建的这个Bean。比如报错说Error creating bean with name orderService它只代表创建OrderService时出了问题不代表问题一定出在OrderService自己身上——有可能是它依赖的某个Bean失败连带它一起创建失败。1.2 为什么创建Bean失败总是包装成同一句提示Spring的AbstractAutowireCapableBeanFactory负责绝大部分Bean创建流程它对整个创建动作做了异常捕获和统一包装。无论底层是NoSuchBeanDefinitionException、NullPointerException还是BeanInstantiationException都会被转成BeanCreationException再抛出。初学者看到控制台第一行就是这个包装后的异常就容易被误导以为当前类写错了实际上要看的是内层的根因。这也是我反复跟同事强调的一句话第一行是告诉你哪个Bean挂了Caused by那一串才是告诉你为什么挂。1.3 一眼拆穿报错结构的阅读顺序一段典型的报错堆栈是这样的org.springframework.beans.factory.BeanCreationException: Error creating bean with name orderController defined in file [...] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name orderService defined in file [...]: Unsatisfied dependency expressed through constructor parameter 0: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type com.example.dao.OrderDao available从后往前读结论非常清晰OrderService构造器需要OrderDao但容器里根本没有这个Bean。前面那一大段orderController的报错只不过是因为Controller依赖ServiceService失败连带Controller创建失败而已。所以拿到这类报错先别急着翻代码先按住Ctrl/Cmd顺着Caused by链从最底层读起。2. 拿到报错后的标准排查链路先别急着改代码我见过很多次这样的场景新手一看到某个类名出现在报错中就立刻去改那个类的代码结果改完重启还是同样报错再回来问我为什么我加了注解还是不行。这其实是排查顺序搞反了。排查创建Bean失败有一套固定顺序按这套顺序走能省掉大量无效操作。2.1 第一步从Caused by链里找到真正的异常把一个完整堆栈拉到记事本里从最底部的Caused by开始看。常见的底部异常类型几乎没有几种NoSuchBeanDefinitionException容器里没有这个BeanNoUniqueBeanDefinitionException容器里有多个同类型Bean没指定用哪个UnsatisfiedDependencyException依赖注入不满足但还带了具体原因BeanCurrentlyInCreationException循环依赖BeanInstantiationException构造器本身有问题NullPointerException经常出现在PostConstruct或工厂方法内部IllegalArgumentException占位符无法解析、配置值非法先认准类型再去项目里做针对性操作。连错误类型都没看清就动手改代码极大概率是白忙。2.2 第二步确认Bean的定义与注入方式锁定异常发生在哪个Bean之后列出这个Bean的三件事Bean定义来源是ComponentScan扫描到的还是Bean方法还是XML配置注入方式构造器注入、字段注入、setter注入还是方法参数注入依赖关系它依赖了哪些Bean哪些配置被传了进来举个例子如果异常在构造函数传参这一行就去查参数类型在容器里有没有对应的Bean如果异常在PostConstruct方法内部就要重点看方法里访问的成员变量有没有可能为null。2.3 第三步用调试器验证BeanDefinition的实际内容如果纯读代码还看不出问题直接用断点。我常用的断点位置是AbstractAutowireCapableBeanFactory.createBean和populateBean以及doGetBean方法里的单例Bean解析逻辑。在断点处能直接看到当前正在创建的BeanName、BeanDefinitionClass、AutowireMode、注入点列表。有一次我排查一个Bean总是创建失败看了半天代码没发现问题断点到populateBean才发现有一个字段加了Value(${order.timeout)}占位符名称在配置里其实是order.timeout-min差一个字符容器反复解析失败。这种问题不看BeanDefinition根本定位不了。2.4 一套可直接复用的Checklist我把日常排查流程整理成一个极简清单照着跑就能覆盖九成场景检查项具体做法命中结果底层异常类型读Caused by链末端确定异常分类Bean定义是否注册搜类上有没有Component/Service/Repository缺失则补注解扫描包路径是否覆盖核对SpringBootApplication所在包与被扫描包的关系范围不符则调整构造器参数是否有对应Bean逐个参数对照容器中的Bean定义或配置类缺失则补Bean是否存在循环依赖看堆栈里是否两个Bean名反复交替出现更换注入方式初始化回调是否报错看PostConstruct内日志与字段营养情况修复回调方法技巧无关的巧合问题编译产物是否越狱、依赖是否冲突清理缓存重建注意这条链路每步都确认对了才往下走。很多人跳过第一步直接改代码就是在浪费时间。3. 五大高频成因逐个拆解依赖、构造器、循环依赖、初始化回调、作用域这一节是全篇最值钱的部分。我把实际项目里遇到过的创建Bean失败按成因分成五类每一类都会写清楚报错特征、根因机制和对应解法。3.1 依赖缺失NoSuchBeanDefinitionException并不总是没写Autowired这是出现率最高的类型。报错长这样No qualifying bean of type com.example.dao.OrderDao available: expected at least 1 bean which qualifies as autowire candidate大多数人第一反应是没写Autowired。但实际情况里依赖缺失的成因五花八门我挑三个最常见的说明。成因一包扫描范围没覆盖到目标类SpringBootApplication默认扫描它所在包及其子包。如果配置类放在com.example.config业务类在com.example.service而启动类在com.otherapp那业务类根本不会被扫描容器里自然没有这个Bean。处理方式是把服务类所在的包统一放在启动类包下面或者显式用ComponentScan指定扫描范围。我见过最坑的情况是多人协作一个仓库每个人把新类放在自己新建的包里结果某次重构后新包不在扫描范围一启动就报依赖缺失。成因二接口有多个实现类没告诉Spring用哪个报错特征是expected single matching bean but found 2: orderDao, orderDaoCache容器里有多个相同接口的实现注入点没有指定唯一候选。解法是给主实现加Primary或者在注入点用Qualifier指定Bean名。底层逻辑是Spring的DefaultListableBeanFactory按类型解析依赖时发现候选集合长度大于1且没有primary标记就会抛NoUniqueBeanDefinitionException。成因三条件装配没生效Spring Boot的ConditionalOnProperty、ConditionalOnClass这类条件注解如果条件判断失败整个Bean定义会被直接跳过。定位这类问题有一个很实用的技巧把logging.level.org.springframework.boot.autoconfigureDEBUG打开启动日志里会打印每个自动配置类的评估匹配结果。有一年我在一个项目里给数据源配置加了ConditionalOnProperty(name db.enable, havingValue true)结果配置里写成了db.enabled启动时静默跳过数据库相关Bean全军覆没排查了很久才从条件评估日志里发现端倪。3.2 构造器迷魂阵多个构造器引发的歧义Spring从4.3开始有个优化如果类只有一个构造器即使没标Autowired也会自动用它。问题往往出在多个构造器的类上。如果类里有多个构造器但都没有Autowired标注Spring默认调用无参构造器。如果你的无参构造器是额外保留的而真正需要注入的依赖在另一个有参构造器里就会导致字段没被注入后续使用时报NullPointerException报错信息被包装成创建Bean失败。还有一种情况是两个有参构造器的参数类型都匹配容器里的BeanSpring无法判断该用哪个直接抛异常。规范化的做法是只保留一个被Autowired标注的有参构造器去掉其他无用构造器。团队多模块项目里如果有人说我加了个无参构造器给工具类用记得检查它是不是和Spring的构造器选择逻辑冲突了。3.3 循环依赖BeanCurrentlyInCreationException是如何发生的什么情况能救循环依赖的报错特征非常明显Requested bean is currently in creation: Is there an unresolvable circular reference?A依赖BB也依赖A创建A时需要B创建B时又需要A两个Bean互相卡住。这里必须理解Spring的一个设计单例Bean在发现循环依赖时并不总是救不了。Spring用三级缓存解决单例setter注入的循环依赖。简化的逻辑是A在实例化后、属性填充前先把自己提前暴露到缓存里B创建时能从这个提前暴露的对象里拿到A的半成品引用等B创建完A再把自己的属性补全。但有两个场景救不了构造器注入的循环依赖构造器必须在实例化一开始就拿到全部参数但对方还没开始创建所以无解非单例Bean的循环依赖prototype作用域默认不缓存每次都是新对象没法用半成品方案一个真实案例同事把Controller和Service之间的调用拆得互相依赖Service构造器里注入了另一个Service这个Service又反向注入了前一个Service一启动就报循环依赖。而项目Spring Boot版本比较新2.6启动时直接拒绝因为新版本默认禁止循环依赖。处理方案按优先级排列重构把互相依赖的逻辑拆开抽到第三个服务里最彻底用Lazy在其中一个注入点加LazySpring会先塞一个代理对象占位真正调用时才去创建目标Bean临时在配置里开启spring.main.allow-circular-referencestrue只适合救急不建议长期保留我自己对循环依赖的态度比较坚决允许它在老项目里暂时存在但新代码一律避免。因为循环依赖会把Bean的初始化顺序隐性捆绑在一起后续任何改动都可能牵一发动全身。3.4 初始化回调PostConstruct和InitializingBean里的空指针这类报错的特点是Bean创建流程一路走到初始化阶段然后在你的回调方法里炸了。比如Component public class CacheWarmer { Autowired private ProductMapper productMapper; PostConstruct public void warmUp() { ListProduct products productMapper.selectList(null); // 这里抛NPE // ... } }如果productMapper因为某些原因注入失败但它依赖的异常被更上层吞掉了而warmUp方法直接空指针最终显示成创建CacheWarmer失败。还有一种经常遇到的情况是PostConstruct方法里读取了带Value的字段占位符没解析出来导致值是null比如${app.name}写成了${app.nmae}。另一个相关点执行顺序。同类的Bean初始化回调执行顺序是顺序回调类型说明1PostConstruct注解方式基于CommonAnnotationBeanPostProcessor2InitializingBean.afterPropertiesSet接口方式3init-methodXML或Bean(initMethod)方式如果同时使用这几种方式顺序是固定的。当初我调试一个连接池初始化顺序问题时就靠这个顺序表判断出某个回调执行时连接池还没准备好调整了回调实现方式就解决了。排查这类问题看清堆栈里的NPE指向自己的哪一行代码往那一行的对象追来源基本都能定位。3.5 作用域与代理prototype注入单例的经典翻车作用域相关报错里最常见的两类是原型Bean注入了单例但不生效和Web作用域在非Web环境报错。原型Bean注入单例的问题单例Bean只会创建一次它运行时注入的原型Bean并不会每次重新创建。如果业务期望每次调用都拿新对象直接注入是拿不到的。解决办法是注入ObjectProviderT或者用Lookup方法或者给原型Bean配置Scoped Proxy。示例如下Component public class OrderService { private final ObjectProviderOrderContext orderContextProvider; public OrderContext getOrderContext() { return orderContextProvider.getIfAvailable(); } }Web作用域报错比如在普通工具类里注入了request作用域的Bean但容器初始化时并没有WebApplicationContext就会报No Scope registered for scope name request这个报错本身是个提示你的Bean作用域选错了环境。改成单例或原型更合适如果你确实要在非Web环境模拟holder也可以用SimpleThreadScope自己注册一个Scope。还有一类容易忽略的开启事务、异步等AOP代理后目标类如果是final的CGLIB无法增强可能报不能为final类生成代理之类的异常也会包装成创建Bean失败。遇到这类报错排查一下EnableAspectJAutoProxy相关配置和切面类即可。4. 连带问题依赖与编译环境给Bean创建挖的坑有时候报错信息看起来是Bean这个问题但底层的根因在项目构建和维护层面。这节说两个经常让老手也卡住的情况。4.1 Maven依赖冲突和类加载路径不一致现象是代码里明明能看到某个类编译也过了一启动就报NoClassDefFoundError或ClassNotFoundException连带某个Bean初始化失败。这种问题九成出在Maven依赖上。我处理过的一个具体案例服务里用了common-config模块的新版API但另一个依赖模块传递引用了旧版本的common-configMaven依赖仲裁选择了旧版本导致运行时类的某个方法不存在报NoSuchMethodError。排查手法标准化为三步用mvn dependency:tree查看依赖树找到到底引的是哪个版本用mvn dependency:analyze找出未声明但实际使用的依赖在pom.xml里对冲突依赖显式声明期望的版本或排除传递依赖很多时候排查出的结论是当前代码和当前依赖不匹配而不是业务代码本身写错了。4.2 IDE旧缓存和编译产物未刷新有段时间我在公司项目里反复遇到一个情况同事在IDEA里改完代码重启Spring Boot项目报错说找不到某个Bean但代码检查里类明明在。最后发现是模块间的增量编译没触发target/classes目录里的.class文件还是旧的IDEA自己没感知到另一个模块的代码更新。处理方式是执行mvn clean compile强制重新编译在IDEA里Invalidate Caches / Restart必要时删掉target目录再重新导入项目如果你是命令行启动也可以先跑一遍mvn clean package -DskipTests再启动避免默认增量编译带来的陈旧产物。这类问题最容易误导人去改Bean配置因为报错表现和逻辑问题几乎一样。所以排查链路里我始终强调先验证当前运行的系统与你的源码状态一致再动手改东西。5. 怎么少踩坑从代码习惯上降低创建Bean失败的概率排查固然重要但更省事的是从源头减少这类报错。我梳理了一些自己在团队里推行的编码习惯能显著降低创建Bean失败的出现率。5.1 依赖注入方式的选择用构造器还是Autowired字段Spring官方推荐构造器注入理由很充分依赖在对象创建那一刻就固定不可变也方便测试直接new。但构造器注入的副作用是容易暴露循环依赖而字段注入悄悄把依赖依赖成null也不会报编译错误。我的实践原则是新代码用构造器注入构造函数参数保持清晰遇到循环依赖先考虑重构而不是为了省事改回字段注入RequiredArgsConstructorLombok和构造器注入结合使用代码简洁5.2 ComponentScan和包结构的守护一个项目的包结构必须在立项时定好规则典型推荐com.example.project ├── Application.java // 启动类放在最顶层 ├── config ├── service ├── dao └── controller启动类放顶层的意义就是让扫描范围天然覆盖所有子包。如果后面加了新模块也要保证模块的根包仍然在启动类的子包下否则就显式加ComponentScan。每次新加包路径时都问一句启动类能扫到吗能省掉大量奇怪的Bean缺失问题。5.3 启动时把Bean的创建过程打开日志调试期可以临时打开Spring核心包的DEBUG日志logging: level: org.springframework.beans.factory: DEBUG org.springframework.boot.autoconfigure: DEBUG启动日志里会打印每个Bean定义的注册过程、条件评估结果和创建顺序。我一般是在排查不过的时候打开定位完再关掉否则日志量太大影响阅读。5.4 占位符配置的统一管理占位符相关的创建失败很隐蔽因为它和代码逻辑无关。我踩过一次教训后就给自己立了一个规矩所有配置项写进统一的配置文件不随手在代码里新增Value。如果一个Bean的字段依赖了某个配置而这个配置不存在启动报错信息一般是Could not resolve placeholder order.timeout in value ${order.timeout}光从代码看很难发现拼写错误必须去配置中心或yaml文件确认键名。团队里配置项的命名尽量统一比如都用中划线或者都用驼峰减少人为错误。处理这类问题的经验是写完配置先在项目里搜索一遍是否真的被使用方引到再启动项目不要幻想等下配置文件被中心同步好了。5.5 回归时多做一次最小复现验证如果某个Bean创建失败特别难定位我有一个强制自己的做法写一个最小复现工程只保留出问题的那几个类与配置跑一遍看是否能复现。这个做法帮我在几次疑难问题中快速排除了框架版本、环境变量、编译产物等因素直接锁定在具体代码逻辑上。这是我处理创建Bean失败类问题最推荐的习惯——很多看似复杂的Bean异常缩小范围后往往突然就暴露了真实通点。最后分享一个每年的经验排查Bean创建失败90%的时间花在确认容器到底看到了什么上而不是代码长什么样上。控制台报错只是冰山一角真正要理解的是BeanDefinition的注册细节、注入点的解析结果、初始化回调的执行时机。把这些底层的机制掌握了看到任何一条BeanCreationException你就不再是查代码查得头晕而是先看Caused by再对号入座三分钟内找到病根。

相关新闻

二叉树最大深度详解:从递归到迭代,彻底理解树的深度计算

二叉树最大深度详解:从递归到迭代,彻底理解树的深度计算

二叉树的最大深度,这题在力扣hot100题里基本是每个刷题人的必经之路,也是二叉树系列里最入门的一道。但我发现一个很有意思的现象:题目本身逻辑极其简单,可评论区里"递归栈溢出""运行时错误""空指针&quo…

2026/10/10 22:36:21 阅读更多 →
Cesium 1.19.11离线加载自定义影像与哈密地形完整实践

Cesium 1.19.11离线加载自定义影像与哈密地形完整实践

前阵子接了一个三维地理信息展示的活儿,要求在内网环境里用 Cesium 搭建一个以哈密区域为核心的三维场景。客户端那边一口咬定必须用 1.19.11 这个老版本,说是之前的系统全部基于这个版本扩展的,升级换新引擎会让一堆历史功能和控件全部报废。…

2026/10/10 22:36:21 阅读更多 →
机场智能化系统建设提案:从总体架构到PPT汇报的完整方法论

机场智能化系统建设提案:从总体架构到PPT汇报的完整方法论

简介:这是一份面向机场智能化规划人员、系统集成工程师及民航相关专业师生的专业课件,完整呈现机场智能化系统建设提案的PPT教案。资源包含1个pptx演示文件,大小约3.34MB,便于直接用于项目汇报、教学演示或方案宣讲。内容以AODB机…

2026/10/10 22:36:21 阅读更多 →

最新新闻

2026海外推广代运营怎么选?外贸出海服务商推荐

2026海外推广代运营怎么选?外贸出海服务商推荐

摘要:海外推广代运营怎么选,工厂最怕选错陪跑方。星谷云深耕B2B制造业近16年、服务6000余家客户,用AI员工加人工专家协同,把建站、社媒、销售、私域交给智能体,让制造企业的海外推广轻量起步、能力长在自己身上&#x…

2026/10/10 23:17:52 阅读更多 →
2026网易企业邮箱销售中心推荐,续费办理渠道

2026网易企业邮箱销售中心推荐,续费办理渠道

在企业数字化办公不断深入的背景下,企业邮箱已成为内部沟通、商务往来与资料归档的重要基础设施。许多企业在选型与到期续费阶段,常会遇到套餐区分不清、办理渠道难以甄别等问题。本文结合网易企业邮箱产品资料,从产品背景、核心能力、版本套餐、适用行业、办理与续费常识等方面…

2026/10/10 23:17:52 阅读更多 →
实测:给 AuK 下句“说东北话“,口音真就改了——语音编辑没有想象中那么玄

实测:给 AuK 下句“说东北话“,口音真就改了——语音编辑没有想象中那么玄

实测:给 AuK 下句"说东北话",口音真就改了——语音编辑没有想象中那么玄 【免费下载链接】AuK 项目地址: https://ai.gitcode.com/tencent_hunyuan/AuK 过去几年,想让一段录音"换个说法""换个口音"&qu…

2026/10/10 23:17:52 阅读更多 →
Java基础知识学习路线:从环境搭建到面试避坑的全指南

Java基础知识学习路线:从环境搭建到面试避坑的全指南

经常有刚入行或者转岗过来的同事问我:Java基础知识到底要怎么学才不算白学?网上的教程刷了一大堆,今天看集合明天看并发,感觉什么都见过,可一写代码还是心虚。这个问题我太有感触了,我带过不少新人&#xf…

2026/10/10 23:17:52 阅读更多 →
Java赋值运算符深度解析:复合赋值隐式强转与面试考点

Java赋值运算符深度解析:复合赋值隐式强转与面试考点

我带过不少转行做Java的同事,也经常帮新人看代码。有个现象特别有意思:问short s 1; s 1;能不能编译通过,好几个人很肯定地说"不行,short加减运算会提升为int,需要强转"。但等他们真跑到IDE里一敲&#xf…

2026/10/10 23:17:51 阅读更多 →
扒开 Ghidra 反编译引擎:汇编到底是怎么被“翻译“回 C 语言的

扒开 Ghidra 反编译引擎:汇编到底是怎么被“翻译“回 C 语言的

扒开 Ghidra 反编译引擎:汇编到底是怎么被"翻译"回 C 语言的 【免费下载链接】ghidra Ghidra is a software reverse engineering (SRE) framework 项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra 导读:当你在 Ghidra 中按下…

2026/10/10 23:16:51 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →