企业如何应对工商网站申报过程中的WordPress网页加载缓慢问题?
摘要:企业每年向工商网站做申报,wordpress网页加载太慢了,中国域名后缀,中英文网站用同域名循环依赖是之前很爱问的一个面试题,最近不咋问了,但是梳理Spring解决循环依赖的源码&
企业每年向工商网站做申报,wordpress网页加载太慢了,中国域名后缀,中英文网站用同域名循环依赖是之前很爱问的一个面试题#xff0c;最近不咋问了#xff0c;但是梳理Spring解决循环依赖的源码#xff0c;会让我们对Spring创建bean的流程有一个清晰的认识#xff0c;有必要搞一搞。开始搞之前#xff0c;先参考了这个老哥写的文章#xff0c;对Spring处理循…循环依赖是之前很爱问的一个面试题最近不咋问了但是梳理Spring解决循环依赖的源码会让我们对Spring创建bean的流程有一个清晰的认识有必要搞一搞。开始搞之前先参考了这个老哥写的文章对Spring处理循环依赖有了一个基本的认识之后然后开始进行源码debug感谢这位老哥的分享https://developer.aliyun.com/article/766880 我们搞一个简单的例子先看看什么是循环依赖我们只讲最简单的这种set方法循环依赖除此之外还有构造器循环依赖我们讲最简单的这种其实道理是一样的。 搞一个demo
Data
Component
public class TestA {Autowiredprivate TestB testB;public void getA(){System.out.println(我是getA方法);}
}Data
Component
public class TestB {Autowiredprivate TestA testA;
}A依赖BB依赖A。这样就形成了一个简单的循环依赖。众所周知Spring解决循环依赖的经典方法是三级缓存当然还有其他的方法也可以处理比如懒加载。今天我们只聊三级缓存其他方式感兴趣的话可以自己查一些资料。 如果之前看过Spring的代码我们就知道Spring在创建bean之前都会先获取bean如果获取不到才会创建bean。所以我们从获取bean开始看起。 获取bean的入口在AbstractBeanFactory的doGetBean方法中。第一行代码我们先看到从缓存获取bean的流程
// Eagerly check singleton cache for manually registered singletons.
Object sharedInstance getSingleton(beanName);这个方法里我们想看的三级缓存就全了
protected Object getSingleton(String beanName, boolean allowEarlyReference) {//先从一级缓存取Object singletonObject this.singletonObjects.get(beanName);if (singletonObject null isSingletonCurrentlyInCreation(beanName)) {synchronized (this.singletonObjects) {//一级缓存没有,从二级缓存取singletonObject this.earlySingletonObjects.get(beanName);if (singletonObject null allowEarlyReference) {//二级缓存没有,从三级缓存取ObjectFactory? singletonFactory this.singletonFactories.get(beanName);if (singletonFactory ! null) {singletonObject singletonFactory.getObject();//三级缓存取出来之后放入二级缓存this.earlySingletonObjects.put(beanName, singletonObject);//从三级缓存移除this.singletonFactories.remove(beanName);}}}}return singletonObject;}刚开始这三个缓存里肯定都没有父容器中也不会有。所以此时需要创建A。
