<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[蜗牛也需要奔跑]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiaomengxin521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaomengxin521]]></copyright><item><title><![CDATA[大文件断点续传（vue+springboot+mysql）]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/150011586</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/150011586</guid><author>xiaomengxin521</author><pubDate>Thu, 07 Aug 2025 15:07:30 +0800</pubDate><description><![CDATA[大文件断点续传]]></description><category></category></item><item><title><![CDATA[RestTemplate调用方法]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/145729570</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/145729570</guid><author>xiaomengxin521</author><pubDate>Wed, 19 Feb 2025 14:55:30 +0800</pubDate><description><![CDATA[处理证书异常问题依赖。]]></description><category></category></item><item><title><![CDATA[java apache.commons.compress Zip压缩]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/138337385</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/138337385</guid><author>xiaomengxin521</author><pubDate>Tue, 30 Apr 2024 10:21:34 +0800</pubDate><description><![CDATA[【代码】java apache.commons.compress Zip压缩。]]></description><category></category></item><item><title><![CDATA[手写jpa自动创建数据库表]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/129154730</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/129154730</guid><author>xiaomengxin521</author><pubDate>Wed, 22 Feb 2023 09:19:16 +0800</pubDate><description><![CDATA[jpa自动创建数据库表]]></description><category></category></item><item><title><![CDATA[org.apache.commons.io.FileUtils.writeStringToFile写入文件失败]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/128132239</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/128132239</guid><author>xiaomengxin521</author><pubDate>Thu, 01 Dec 2022 15:28:03 +0800</pubDate><description><![CDATA[org.apache.commons.io.FileUtils.writeStringToFile写入文件失败]]></description><category></category></item><item><title><![CDATA[esaypoi导入excel工具模版]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/127946025</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/127946025</guid><author>xiaomengxin521</author><pubDate>Sun, 20 Nov 2022 11:26:23 +0800</pubDate><description><![CDATA[Excel批量导入，有这一篇够用了，附带源码]]></description><category></category></item><item><title><![CDATA[linux删除指定日期之外的文件]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/127382003</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/127382003</guid><author>xiaomengxin521</author><pubDate>Tue, 18 Oct 2022 09:44:02 +0800</pubDate><description><![CDATA[linux 删除指定天数之外的文件]]></description><category></category></item><item><title><![CDATA[java服务配置开机自动重启]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/126076303</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/126076303</guid><author>xiaomengxin521</author><pubDate>Sat, 30 Jul 2022 19:04:58 +0800</pubDate><description><![CDATA[java jar包 linux 开机自启动]]></description><category></category></item><item><title><![CDATA[spring源码aop解析xml生成bean定义信息]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124616130</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124616130</guid><author>xiaomengxin521</author><pubDate>Tue, 10 May 2022 17:51:10 +0800</pubDate><description><![CDATA[spring面向切面编程是咱们工作中使用比较频繁的一项技术，比如：日志、事务、表单重复提交等
了解aop之前需要先了解几个概念

什么是aspect ：切面
什么是连接点：切面方法
切入点表达式：用于过滤目标方法的过滤器
什么是织入：所有切面方法的总称
什么是目标方法：被代理的对象方法

看下AOP处理器
public class AopNamespaceHandler extends NamespaceHandlerSupport {
	@Override
	public void init() {
		]]></description><category></category></item><item><title><![CDATA[spring源码如何解决循环依赖]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124589027</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124589027</guid><author>xiaomengxin521</author><pubDate>Fri, 06 May 2022 00:03:23 +0800</pubDate><description><![CDATA[到这里咱们IOC简单流程基本上算结束了，但是有一个非常火热的解决方案值得咱们深入了解下，那就是循环依赖
下面咱们从这三个维度去分析：

什么是循环依赖？
造成循环依赖的原因是什么？
spring是怎么解决的循环依赖？
最后演示下流程

什么是循环依赖？
咱们都知道，spring创建bean分为实例化、填充属性、初始化等，当对象完成实例化后开始给属性赋值，这时咱们再去想一个场景，如果一个对象A有属性B b，对象B有一个属性是A a，咱们设想下，spring开始创建A对象对，然后给A对象的属性b进行赋值，那么这]]></description><category></category></item><item><title><![CDATA[spring源码注册需要销毁的bean registerDisposableBeanIfNecessary]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124582065</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124582065</guid><author>xiaomengxin521</author><pubDate>Thu, 05 May 2022 11:21:41 +0800</pubDate><description><![CDATA[前篇文章传送门
咱们上篇了解bean的初始化，
大家可以想下，bean为什么要销毁？

用完不再使用的bean
指定了destroy方法的bean执行destroy方法
容器关闭
spring把需要销毁的bean注册到哪里呢？disposableBeans = new LinkedHashMap&lt;&gt;();
在何时进行销毁的？

registerDisposableBeanIfNecessary 注册需要被销毁的bean
protected void registerDisposableBeanI]]></description><category></category></item><item><title><![CDATA[spring源码执行bean的init方法 initializeBean]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124569000</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124569000</guid><author>xiaomengxin521</author><pubDate>Wed, 04 May 2022 14:22:13 +0800</pubDate><description><![CDATA[前篇文章传送门
前两篇了解了bean的属性性赋值，这个过程如果字段是引用类型的对象，那么spring会去工厂中查找，如果查找不到，再去执行工厂创建bean的那套流程，现在属性赋值完成了后，接下来开始执行init方法了。
那么执行init方法前后会做哪些事情呢？

invokeAwareMethods Aware接口是做什么的？
postProcessBeforeInitialization 作用是什么？
什么时候执行init方法？
applyBeanPostProcessorsAfterInitializa]]></description><category></category></item><item><title><![CDATA[spring源码对属性赋值 populateBean (XML)]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124540851</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124540851</guid><author>xiaomengxin521</author><pubDate>Tue, 03 May 2022 18:33:34 +0800</pubDate><description><![CDATA[前篇传送门
上篇文章了解了spring注解是如何进行赋值操作，接下继续看看xml配置是如何进行赋值的
先想一个问题，xml中配置有哪些类型？

RuntimeBeanReference bean对象
RuntimeBeanNameReference
BeanDefinitionHolder
BeanDefinition
DependencyDescriptor
ManagedArray 数组
ManagedList List集合
ManagedSet set集合
ManagedMap map
Managed]]></description><category></category></item><item><title><![CDATA[spring源码对属性赋值 populateBean(注解)]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123724566</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123724566</guid><author>xiaomengxin521</author><pubDate>Mon, 02 May 2022 11:19:40 +0800</pubDate><description><![CDATA[前篇文章传送门
上篇咱们聊到了bean的实例化，在里面了解常见的几种实例化bean的方式，那么bean实例化完成只是一个空的bean，一个空属性的bean对于咱们来说没什么实际意义的。接下来咱们来了解bean的属性是如何进行赋值的。
咱们如何给对象赋值的呢？
咱们平常开发中给对象赋值无非两种方式

通过构造器
通过set方法

那spring是如何做的呢？属性有哪些类型呢？
咱们继续看看spring源码中是如何进行赋值的

hasInstantiationAwareBeanPostProcessors 修改]]></description><category></category></item><item><title><![CDATA[spring源码合并bean定义信息 applyMergedBeanDefinitionPostProcessors]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124396903</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124396903</guid><author>xiaomengxin521</author><pubDate>Mon, 25 Apr 2022 23:52:07 +0800</pubDate><description><![CDATA[上篇咱们聊到了bean实例的创建，按照流程图上面接下来应该进行属性填充了。这在里咱们思考一个问题，咱们@Autowired，@Value,@Resource，@PostConstruct，@PreDestroy是什么时候处理的呢，假如xml中配置了，注解也配置了，应该怎么处理呢？

AutowiredAnnotationBeanPostProcessor 处理@Autowired和@Value注解bean定义信息
CommonAnnotationBeanPostProcessor 处理@Resource、@]]></description><category></category></item><item><title><![CDATA[记录短信模块系统设计，采用redis队列（SMS）]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124346895</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/124346895</guid><author>xiaomengxin521</author><pubDate>Fri, 22 Apr 2022 22:02:55 +0800</pubDate><description><![CDATA[本章内容是完整流程，只对粉丝开放
背景
随着系统用户越来越多，业务流程越来越完善，但同时也暴露出了一些问题，比如，关键的流程节点用户比较关注，可能会涉及到时效性，用户只有登录到系统才能看到流程阶段信息。为了解决流程关键节信息差，时效性差等问题，项目决定对接短信。
业务模块:目前项目业务模块分为三个部分，以后有可能会增加其他模块。

AA 模块
BB 模块
CC 模块

表设计
sms_config：短信配置表，用于存储短信提供方模板标识和占位符参数获取方法
sms：短信表，用于存储短信内容相关信息]]></description><category></category></item><item><title><![CDATA[spring源码实例化bean createBeanInstance]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123651625</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123651625</guid><author>xiaomengxin521</author><pubDate>Thu, 24 Mar 2022 22:46:05 +0800</pubDate><description><![CDATA[前篇文章传送门
上篇咱们聊到了doCreateBean方法，在里面了解到先进行获取bean的实例，然后给属性赋值，再调用bean的初始化方法，如果需要的话会把bean注册到销毁容器中。接下来咱们了解下实例化的流程
spring实例化有哪些方式
可以试想下，如果让咱们自己实现实例化bean，会如何做？

通过supplier
通过FactoryBean
通过构造方法（反射）
…

源码
protected BeanWrapper createBeanInstance(String beanName, Root]]></description><category></category></item><item><title><![CDATA[spring源码实例化剩余的bean finishBeanFactoryInitialization]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123644929</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123644929</guid><author>xiaomengxin521</author><pubDate>Tue, 22 Mar 2022 00:00:42 +0800</pubDate><description><![CDATA[前篇文章传送门
咱们前面了解了spring容器创建，然后加载了bean的定义信息，执行了BDRPP，执行了BFPP，注册了BPP，前面的这么多步骤，就是为了创建Bean实例并初始化，接下来咱们了解剩下的流程
概括
咱们都知道，前面的步骤创建了很多内部使用的bean，但是真正咱们使用bean大部分没有创建，为什么说大部分呢，因为BDRPP、BFPP、BPP这个时间已经创建完了，并且BFPP已经执行完了。说了这么多没用的，咱们看下剩下的流程吧

getBean
doGetBean
getSingleton
cr]]></description><category></category></item><item><title><![CDATA[spring 源码注册BPP-registerBeanPostProcessors]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123620965</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123620965</guid><author>xiaomengxin521</author><pubDate>Sun, 20 Mar 2022 21:16:50 +0800</pubDate><description><![CDATA[上篇传送门
前两篇咱们了解了component-scan和其他一些注解的解析成bean定义信息的过程，前者是通过XML的方式loadBeanDefinition，后者通过ConfigurationClassPostProcessor来实现，那么这时候，bean的定义信息基本上算是完成了，接下来进行注册BPP
BPP就是用来拦截bean的创建，在初始化前后进行增强，具体细节咱们后面会详聊

获取所有BPP的bean名称
创建一个BeanPostProcessorChecker
遍历BPP名称
分组并实例化
注]]></description><category></category></item><item><title><![CDATA[spring 源码执行BFPP invokeBeanFactoryPostProcessors-ConfigurationClassPostProcessor （2）]]></title><link>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123511888</link><guid>https://blog.youkuaiyun.com/xiaomengxin521/article/details/123511888</guid><author>xiaomengxin521</author><pubDate>Sun, 20 Mar 2022 16:13:05 +0800</pubDate><description><![CDATA[上篇传送门
上篇介绍了component-scan标签的解析，把扫描到的@Component类文件扫描到，然后生成bean定义信息并注册到工厂，工厂注册完后，又注册了注解解析内部定义信息（后置处理器）以及监听器，接下来咱们继续看下是如何执行后置处理器的


...]]></description><category></category></item></channel></rss>