熟练掌握Spring、SpirngMVC、SpringBoot、Shiro、SpirngSession、Mybatis、MybatisPlus、XXL-JOB等开源框架,并且对以上框架有源码阅读,可搭

发布时间:2026/11/12 20:03:53

熟练掌握Spring、SpirngMVC、SpringBoot、Shiro、SpirngSession、Mybatis、MybatisPlus、XXL-JOB等开源框架,并且对以上框架有源码阅读,可搭 Springbean的生命周期更正实例化的时候已经调用了构造方法图中初始化和构造方法调用忽略初始化就是包含注解、接口实现3配置指定的三个初始化方法。一、IOC容器的三级缓存在Spring框架中IOCInversion of Control控制反转容器是核心组件之一负责对象的创建、依赖注入以及生命周期管理。为了处理Bean的创建和依赖注入特别是解决循环依赖和AOP代理问题Spring引入了三级缓存机制。IOC工厂一级缓存(ConcurrentHashMap)存放完全初始化好的Bean直接用二级缓存存放实例化的Bean(调用完构造方法 但尚未填充属性)三级缓存存放获取bean引用的钩子函数Bean的产生过程无循环依赖三级缓存仅存放 → 直接进入一级缓存有循环依赖1. 创建A │ ├─ 实例化A ├─ 放入三级缓存A工厂 │ └─ 填充A属性时发现需要B │ 2. 创建B │ ├─ 实例化B ├─ 放入三级缓存B工厂 │ └─ 填充B属性时发现需要A │ ├─ 查一级缓存无A ├─ 查二级缓存无A │ 3. 解决循环依赖 │ ├─ 从三级缓存获取A工厂 ├─ 执行getObject()获得A早期引用 │ ├─ 升级缓存 │ 三级缓存移除A → 二级缓存加入A │ └─ 将A早期引用注入B │ 4. 完成B初始化 │ ├─ B放入一级缓存 │ └─ 返回继续初始化A │ ├─ 从一级缓存获取完整B ├─ 将B注入A │ 5. 完成A初始化 │ ├─ A放入一级缓存 └─ 二级缓存移除Abean的注册方式1.Bean、Component类似这样都是直接通过bean工厂的后置处理器扫描成BeanDefine的2.Import Import({Red.class, Yellow.class, Blue.class})3. implements ImportSelector selectImports 出一个类的全限定名4. implements ImportBeanDefinitionRegistrar registerBeanDefinitions一个BeanAOPspring 有接口用jdk没有接口用CGLIB。springboot 默认都用CGLIB。前置通知Before - 目标方法执行 - 后置通知After如果目标方法成功返回返回通知AfterReturning如果目标方法抛出异常异常通知AfterThrowingjdk和cglibjdk为目标类生成一个代理类$proxy*.class该代理类实现了目标类接口实现接口的所有增强方法调用的时候先通过代理类调用处理类的增强方法在通过反射的方式调用目标类方法。限制同个类内部调用不走代理对象不会进行增强。需要代理的方法不能是private需要是实现接口的方法。cglib通过ASM技术生成目标类的一个子类重写父类的需要增强的方法通过代理类方法增强直接调用父类的方法。不能是final和private不然不能继承。还会生成FastClass路由类使得本类调用也能进行增强。但是springboot为了统一aop模式没有去实现。性能最新版本的都差不多。事务1.Spring事务是基于数据库事务和Aop机制的同样通过BeanPostProcessor解析和创建动态代理2.为使用Transitional注解的Bean创建代理try{4.创建一个数据库连接设置autocommit为false启用数据库的begin5.执行数据库的sql7.没有异常直接commit}catch{6.出现异常调用数据库的rollback}finally7.释放连接1.REQUIRED必须默认的传播行为。如果当前存在事务则加入该事务如果当前没有事务则创建一个新的事务。这是最常见的选择适用于大部分业务场景。2.REQUIRES_NEW必须新每次都会新开启一个事务且新老事务相互独立。不管是否存在事务都会新开启一个事务。外部事务抛出异常回滚不会影响内部事务的正常提交。使用ThreadLocal把sqlsession放置ThreadLocal里面。当出现REQUIRED时获取到当前ThreadLocal里面的sqlsession并且判断是否begin开启了事务。若开启了则沿用这个sqlsession。否则REQUIRES_NEW情况则新建一个sqlsession放入ThreadLocal老的暂存调用begin执行完以后把老的放回来。spring如何整合mybatis的1.mybatis实现了BeanDefinitionRegistyPostProcessor重写了ClassPathBeanDefinitionScanner排除了接口的方法把接口也扫描进行。2.但是仍然是接口再通过FactoryBean动态的获取 jdk创建的代理对象。Spring MVC1.请求DispatcherServlet同一抽象为了一个Servlet。2.请求HandlerMapping获取HandlerExcutionChain根据路径找到对应的Contoller已经前面的拦截器的执行链3.请求HandlerAdapter寻找对应的处理器。一般都是RequestMappingHandler4.ajax中间会使用HttpMessageConvert进行对象与json的序列化转换最终返回给前端。若果是原生的ModelAndView会交给视图解析器填充view的数据之后通过模版引擎响应给前端。某个preHandle返回false 则后续的pre和post Handle不再执行但是afterCompletion一定会顺序执行。SpringBoot自动配置原理启动原理new SpringApplication().run()SpringApplication初始化应用1.推断当前的Web类型。2.注册各种监听器初始化器。.run1.加载全部的环境变量并且发布事件通知。2.reflash方法创建ioc容器并且启动。这一步会完成ioc容器的创建扫描全部的自动配置类加载容器多一步骤就是启动一个内置的servlet容器。3.回调应用创建成功的事件。boot配置文件加载优先级命令行参数使用–参数指定的配置具有最高的优先级。例如–server.port8081。系统属性通过-D参数指定的系统属性优先级次之。例如java -Dserver.port8080 -jar app.jar。项目根目录下的config/目录如config/application.properties或config/application.yml。项目根目录如application.properties或application.yml。类路径下的config/目录如resources/config/application.properties或resources/config/application.yml。类路径的根目录如resources/application.properties或resources/application.yml。SpirngSession包装Request和response放置redis中使得多回话进行共享。Mybatis的缓存一级缓存是SqlSession级别的缓存默认开启同一个SqlSession执行了两次相同的sql会直接从内存中返回结果本质就是一个mapkey为sqlvalue 就是结果中间执行过insert或者update会使得这个map全部清空。二级缓存是跨 SqlSession 其作用范围是 Mapper 多个 SqlSession 可以共享同一个二级缓存。但是容易存在脏读的问题当xml里面涉及关联查询的sql若有缓存的话它就不会去查询关联的表的结果了。所以建议直接使用redis去控制缓存。Mybatis的执行器SimpleExecutor(简单执行器)默认执行器每次执行都会创建一个新的 Statement 对象不缓存 StatementReuseExecutor(重用执行器)重用预处理语句(PreparedStatement)以 SQL 作为 key 缓存 Statement减少重复预编译开销BatchExecutor(批处理执行器) - 专门用于批量操作将所有更新操作集中批量执行此外MybatisPlus的自动配置的savebatch方法需要指定sql链接的url后面加上rewriteBatchedStatements 才能使用BatchExecutor模式mysql默认是关闭的。批量操作批量新增的时候xml 的 foreach 自己将所有结果合成一条sql的时候建议50条一写入因为数据条目一多拼接组装的性能会大幅度下降。最快的还是启用batch模式50条组成一条sql10条这样的sql组成一个批次统一提交给mysql这样就一次性执行了10条sql并且这10条sql只和mysql做了一次连接操作。update批量可以循环foreach实现多条一次性提交。但是这种批量操作都需要注意整体的sql的长度小于mysql连接最大接受sql的大小所以预防网络拥塞会将一个大数组用工具类按照条数切割成多个小数组进行批量操作。mybatis plus的话service层的saveBatch是一条条连接新增的mapper层的insertBatch则是将多条新增sql一次性发送给数据库进行操作的高性能。也可配置insertSomeColumn将多条新增sql拼接层一条执行但上面两种方式都是高效的。XXL-JOBXXL-JOB的路由模式就是任务执行的模式不想分片进行的话可以选择第一个执行。除此以外大型任务可选分片广播模式每个分片会获得一个分片号sql查询的时候去取模运算各自处理不同的分片数据。阻塞处理策略一般选择串行排队就是同一个任务上一个次还没完成下一时间点到了阻塞执行。并且一定要整体任务的执行时间必须小于时间间隔尽量不要让串行排队发生不然很多任务需要依赖当前的任务时间。注意同时串行执行防止多线程并发问题。还有任务停止策略xxl-job去停止任务只是结束了下一次调用。不能结束正在调用的任务。运行模式GlueJava模式用户可以在调度中心直接编写基于Java的代码片段来执行任务。Bean模式通过注解将任务绑定到Spring容器中的Bean实现任务的动态注册和执行。所以对于长任务需要注意的点。1.分批次拉取数据不能一次性加载至内存撑爆。2.分批次控制事务不能把一整个任务当成一个大事务进行回滚防止某一条数据出异常导致全局代码回滚。3.每批次任务处理完毕记录一个的任务进度id防止意外服务宕机下一次任务又要重新开始。4.设置一个全局开关比如一个全局的Bean里面有个一标志分批次任务每一次循环都需要查询全局开关是否开启若是不启用则直接退出任务。在主动发版前修改关闭这个全局开关业务代码就能安全退出。
延伸阅读

更多相关文章

2026/11/8 14:36:12

YuE2:AR-NAR混合架构的文本生成新范式

1. 项目概述:YuE不是“月娥”,而是AR-NAR混合架构下的新一代文本生成范式最近在Hugging Face上刷到一个叫“YuE”的模型仓库,点进去发现它既不是嫦娥奔月的浪漫隐喻,也不是某个小众库的缩写代号——它是一套实打实跑在PyTorch上的…

2026/11/10 3:52:14

熟悉 Tomcat与Netty,请求处理流程,NIO 底层原理,线程池优化。掌握Nginx基本配置,进行流量限制与转移分发,配合OpenResty编写Lua脚本实现业务极高并发。并熟练掌握JMeter

Tomcatserver对应整体tomcat服务,内置一个叫 卡特玲娜的 service 。 会有多个connector连接,负责处理不同的服务端口,如http80 s 443。 在向里面会有多个host 、 每个虚拟host对应一个文件夹默认webapps, 每个host里有又会有多个s…

2026/11/12 19:59:11

宿州电工证要怎么考全流程办理指南

宿州电工证要怎么考全流程办理指南 你是不是也担心自己学历不高,怕报不了名?别急,电工证考试其实对学历要求并不高,只要你是年满18周岁、身体健康、具备初中及以上文化程度,并且有相关工作经验或培训经历,就可以报名参加考试。特别是在宿州这样的地方…

2026/11/12 19:59:11

曹县办理电工证办法良心建议:工地太忙根本没时间复习考试怎么办?

曹县办理电工证办法良心建议:工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,这是很多一线电工朋友的真实写照。特别是在曹县,项目工期紧、任务重,很多人连休息时间都紧张,更别说抽出时间准备特种作业操作证的考试了。别急,我这有…

2026/11/12 19:59:11

你急需特种作业证才能上岗找工作?内部消息揭秘实惠的中级电工证

你急需特种作业证才能上岗找工作?内部消息揭秘实惠的中级电工证 刚从工地跑回来,手上的泥还没干,心里却急得冒火。今天早上,我跟着项目部的师傅去验收设备时,被拦在了施工区外,理由是“没有特种作业证不能进场作业”。我跟师傅说了半天,也没能进去,那…

2026/11/12 19:54:10

今年电工证啥时候考?官方报名入口已开通,错过就亏大了

今年电工证啥时候考?官方报名入口已开通,错过就亏大了 你是不是也这样?拿着简历去面试,人家问一句“有电工证吗”,你一愣,心里咯噔一下——没有!因为没证,直接被pass。现在找工作,特种作业证已经不是加分项,而是硬门槛。特别是电工证,几乎每个…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑