[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"cat-spring":85,"catposts-spring":99,"post-detail-post-spring-transaction-4d4be0d6":208},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":91,"status":97,"postCount":73},{"name":87,"creationTimestamp":88,"labels":89},"spring","2026-09-13T09:13:25.731462Z",{"haloweb.section":90},"interview",{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},"Spring 面试题","","Spring 面试题：IoC 容器、AOP 原理、声明式事务、Bean 生命周期与高频源码。",9,false,{"permalink":98,"postCount":73,"visiblePostCount":73},"\u002Fcategories\u002Fspring",[100,124,145,166,187],{"metadata":101,"spec":104,"status":113,"categories":118},{"name":102,"creationTimestamp":103},"post-spring-circular-dependency-94e0cc24","2026-09-13T10:01:02.690961Z",{"title":105,"slug":106,"cover":93,"excerpt":107,"publishTime":109,"categories":110,"tags":111,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Spring 如何解决循环依赖？","spring-circular-dependency",{"raw":93,"autoGenerate":108},true,"2026-09-13T10:01:02.739844Z",[87],[],"PUBLIC",{"permalink":114,"excerpt":115,"lastModifyTime":116,"phase":117},"\u002Farchives\u002Fspring-circular-dependency","一、什么是循环依赖 A 依赖 B，B 依赖 A，形成循环。 二、三级缓存 Spring 通过三级缓存解决 singleton 的循环依赖： singletonObjects：一级缓存，存完全初始化好的 Bean。 earlySingletonObjects：二级缓存，存早期引用（实例化但未属性赋值）","2026-09-16T09:14:37.864948Z","PUBLISHED",[119],{"metadata":120,"spec":122,"status":123,"postCount":73},{"name":87,"creationTimestamp":88,"labels":121},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":125,"spec":128,"status":135,"categories":139},{"name":126,"creationTimestamp":127},"post-spring-transaction-4d4be0d6","2026-09-13T10:01:02.510982Z",{"title":129,"slug":130,"cover":93,"excerpt":131,"publishTime":132,"categories":133,"tags":134,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Spring 事务的传播行为和隔离级别？","spring-transaction",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:02.556020Z",[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":117},"\u002Farchives\u002Fspring-transaction","一、七种传播行为 传播行为 说明 REQUIRED（默认） 有事务就加入，没有就新建 REQUIRES_NEW 总是新建事务，挂起当前事务 SUPPORTS 有事务就加入，没有就非事务执行 NOT_SUPPORTED 非事务执行，挂起当前事务 MANDATORY 必须有事务，否则抛异常 NEVER ","2026-09-16T09:14:37.402303Z",[140],{"metadata":141,"spec":143,"status":144,"postCount":73},{"name":87,"creationTimestamp":88,"labels":142},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":146,"spec":149,"status":156,"categories":160},{"name":147,"creationTimestamp":148},"post-spring-aop-000624ea","2026-09-13T10:01:02.330064Z",{"title":150,"slug":151,"cover":93,"excerpt":152,"publishTime":153,"categories":154,"tags":155,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Spring AOP 的实现原理？","spring-aop",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:02.385481Z",[87],[],{"permalink":157,"excerpt":158,"lastModifyTime":159,"phase":117},"\u002Farchives\u002Fspring-aop","一、AOP 概念 面向切面编程，把横切逻辑（日志、事务、权限）从业务代码中抽离，通过动态织入实现。 二、动态代理 JDK 动态代理：目标类实现接口时使用，基于反射生成代理类。 CGLIB 代理：目标类无接口时使用，基于 ASM 生成目标类的子类。 Spring 自动选择：有接口用 JDK，无接口用 ","2026-09-16T09:14:36.969681Z",[161],{"metadata":162,"spec":164,"status":165,"postCount":73},{"name":87,"creationTimestamp":88,"labels":163},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":167,"spec":170,"status":177,"categories":181},{"name":168,"creationTimestamp":169},"post-spring-bean-scope-0026d011","2026-09-13T10:01:02.137013Z",{"title":171,"slug":172,"cover":93,"excerpt":173,"publishTime":174,"categories":175,"tags":176,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Spring Bean 的作用域有哪些？","spring-bean-scope",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:02.186869Z",[87],[],{"permalink":178,"excerpt":179,"lastModifyTime":180,"phase":117},"\u002Farchives\u002Fspring-bean-scope","一、singleton（默认） 容器中只有一个实例，全局共享。适合无状态 Bean。 二、prototype 每次获取都创建新实例。适合有状态 Bean。 三、request（Web） 每次 HTTP 请求一个实例。 四、session（Web） 每个 HTTP Session 一个实例。 五、ap","2026-09-16T09:14:36.382287Z",[182],{"metadata":183,"spec":185,"status":186,"postCount":73},{"name":87,"creationTimestamp":88,"labels":184},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":188,"spec":191,"status":198,"categories":202},{"name":189,"creationTimestamp":190},"post-spring-ioc-di-413f32bf","2026-09-13T10:01:01.935988Z",{"title":192,"slug":193,"cover":93,"excerpt":194,"publishTime":195,"categories":196,"tags":197,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},"Spring 的 IOC 和 DI 是什么？","spring-ioc-di",{"raw":93,"autoGenerate":108},"2026-09-13T10:01:01.985311Z",[87],[],{"permalink":199,"excerpt":200,"lastModifyTime":201,"phase":117},"\u002Farchives\u002Fspring-ioc-di","一、IOC（控制反转） 对象的创建和依赖管理由容器负责，而不是在代码中 new。控制权从业务代码转移到 Spring 容器。 二、DI（依赖注入） IOC 的实现方式。容器把对象依赖的其他对象注入进去。 三种注入方式： - 构造器注入：通过构造方法，推荐（依赖不可变、无循环依赖风险）。 - sett","2026-09-16T09:13:51.823789Z",[203],{"metadata":204,"spec":206,"status":207,"postCount":73},{"name":87,"creationTimestamp":88,"labels":205},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"metadata":209,"spec":210,"status":214,"categories":215,"content":221},{"name":126,"creationTimestamp":127},{"title":129,"slug":130,"cover":93,"excerpt":211,"publishTime":132,"categories":212,"tags":213,"priority":27,"pinned":96,"deleted":96,"visible":112,"allowComment":108},{"raw":93,"autoGenerate":108},[87],[],{"permalink":136,"excerpt":137,"lastModifyTime":138,"phase":117},[216],{"metadata":217,"spec":219,"status":220,"postCount":73},{"name":87,"creationTimestamp":88,"labels":218},{"haloweb.section":90},{"displayName":92,"slug":87,"cover":93,"description":94,"priority":95,"hideFromList":96,"preventParentPostCascadeQuery":96},{"permalink":98,"postCount":73,"visiblePostCount":73},{"content":222,"raw":222},"\u003Ch2>一、七种传播行为\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>传播行为\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>REQUIRED（默认）\u003C\u002Ftd>\n\u003Ctd>有事务就加入，没有就新建\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>REQUIRES_NEW\u003C\u002Ftd>\n\u003Ctd>总是新建事务，挂起当前事务\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>SUPPORTS\u003C\u002Ftd>\n\u003Ctd>有事务就加入，没有就非事务执行\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>NOT_SUPPORTED\u003C\u002Ftd>\n\u003Ctd>非事务执行，挂起当前事务\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>MANDATORY\u003C\u002Ftd>\n\u003Ctd>必须有事务，否则抛异常\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>NEVER\u003C\u002Ftd>\n\u003Ctd>必须非事务，有事务抛异常\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>NESTED\u003C\u002Ftd>\n\u003Ctd>嵌套事务，savepoint\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>二、隔离级别\u003C\u002Fh2>\n\u003Cp>同数据库：READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE，默认用数据库默认。\u003C\u002Fp>\n\u003Ch2>三、事务失效场景\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>方法非 public\u003C\u002Fli>\n\u003Cli>同类内部方法调用（绕过代理）\u003C\u002Fli>\n\u003Cli>异常被 try-catch 吞掉\u003C\u002Fli>\n\u003Cli>抛出非 RuntimeException（默认不回滚）\u003C\u002Fli>\n\u003Cli>数据库引擎不支持事务（如 MyISAM）\u003C\u002Fli>\n\u003C\u002Ful>"]