百度seo新站优化seo手机关键词排行推广
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:03
当前位置: 首页 > news >正文
百度seo新站优化,seo手机关键词排行推广,手机网站建设口碑好,钓鱼平台设计Spring源码 参考资料 https://www.bilibili.com/video/BV1Tz4y1a7FM https://www.bilibili.com/video/BV1iz4y1b75q bean的生命周期 bean–推断构造方法#xff08;默认是无参构造#xff0c;或指定的构造方法#xff09;–实例化成普通对象#xff08;相当于ne…Spring源码 参考资料 https://www.bilibili.com/video/BV1Tz4y1a7FM https://www.bilibili.com/video/BV1iz4y1b75q bean的生命周期 bean–推断构造方法默认是无参构造或指定的构造方法–实例化成普通对象相当于new bean –进行依赖注入bean里的属性–执行afterPropertiesSet()InitializingBean的一个回调方法同PostConstruct –初始化后是否需要AOP–AOP–代理对象target普通对象–把对象放入Mapbeanname,bean对象单例池 //真正创建Bean的方法protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Nullable Object[] args)throws BeanCreationException {// Instantiate the bean.//封装被创建的Bean对象BeanWrapper instanceWrapper null;if (mbd.isSingleton()) {instanceWrapper this.factoryBeanInstanceCache.remove(beanName);}if (instanceWrapper null) {instanceWrapper createBeanInstance(beanName, mbd, args);}final Object bean instanceWrapper.getWrappedInstance();//获取实例化对象的类型Class? beanType instanceWrapper.getWrappedClass();if (beanType ! NullBean.class) {mbd.resolvedTargetType beanType;}// Allow post-processors to modify the merged bean definition.//调用PostProcessor后置处理器synchronized (mbd.postProcessingLock) {if (!mbd.postProcessed) {try {applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);}catch (Throwable ex) {throw new BeanCreationException(mbd.getResourceDescription(), beanName,Post-processing of merged bean definition failed, ex);}mbd.postProcessed true;}}// Eagerly cache singletons to be able to resolve circular references// even when triggered by lifecycle interfaces like BeanFactoryAware.//向容器中缓存单例模式的Bean对象以防循环引用boolean earlySingletonExposure (mbd.isSingleton() this.allowCircularReferences isSingletonCurrentlyInCreation(beanName));if (earlySingletonExposure) {if (logger.isDebugEnabled()) {logger.debug(Eagerly caching bean beanName to allow for resolving potential circular references);}//这里是一个匿名内部类为了防止循环引用尽早持有对象的引用addSingletonFactory(beanName, () - getEarlyBeanReference(beanName, mbd, bean));}// Initialize the bean instance.//Bean对象的初始化依赖注入在此触发//这个exposedObject在初始化完成之后返回作为依赖注入完成后的BeanObject exposedObject bean;try {//将Bean实例对象封装并且Bean定义中配置的属性值赋值给实例对象populateBean(beanName, mbd, instanceWrapper);//初始化Bean对象exposedObject initializeBean(beanName, exposedObject, mbd);}catch (Throwable ex) {if (ex instanceof BeanCreationException beanName.equals(((BeanCreationException) ex).getBeanName())) {throw (BeanCreationException) ex;}else {throw new BeanCreationException(mbd.getResourceDescription(), beanName, Initialization of bean failed, ex);}}if (earlySingletonExposure) {//获取指定名称的已注册的单例模式Bean对象Object earlySingletonReference getSingleton(beanName, false);if (earlySingletonReference ! null) {//根据名称获取的已注册的Bean和正在实例化的Bean是同一个if (exposedObject bean) {//当前实例化的Bean初始化完成exposedObject earlySingletonReference;}//当前Bean依赖其他Bean并且当发生循环引用时不允许新创建实例对象else if (!this.allowRawInjectionDespiteWrapping hasDependentBean(beanName)) {String[] dependentBeans getDependentBeans(beanName);SetString actualDependentBeans new LinkedHashSet(dependentBeans.length);//获取当前Bean所依赖的其他Beanfor (String dependentBean : dependentBeans) {//对依赖Bean进行类型检查if (!removeSingletonIfCreatedForTypeCheckOnly(dependentBean)) {actualDependentBeans.add(dependentBean);}}if (!actualDependentBeans.isEmpty()) {throw new BeanCurrentlyInCreationException(beanName,Bean with name beanName has been injected into other beans [ StringUtils.collectionToCommaDelimitedString(actualDependentBeans) ] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using getBeanNamesOfType with the allowEagerInit flag turned off, for example.);}}}}// Register bean as disposable.//注册完成依赖注入的Beantry {registerDisposableBeanIfNecessary(beanName, bean, mbd);}catch (BeanDefinitionValidationException ex) {throw new BeanCreationException(mbd.getResourceDescription(), beanName, Invalid destruction signature, ex);}return exposedObject;}//初始容器创建的Bean实例对象为其添加BeanPostProcessor后置处理器protected Object initializeBean(final String beanName, final Object bean, Nullable RootBeanDefinition mbd) {//JDK的安全机制验证权限if (System.getSecurityManager() ! null) {//实现PrivilegedAction接口的匿名内部类AccessController.doPrivileged((PrivilegedActionObject) () - {invokeAwareMethods(beanName, bean);return null;}, getAccessControlContext());}else {//为Bean实例对象包装相关属性如名称类加载器所属容器等信息invokeAwareMethods(beanName, bean);}Object wrappedBean bean;//对BeanPostProcessor后置处理器的postProcessBeforeInitialization//回调方法的调用为Bean实例初始化前做一些处理if (mbd null || !mbd.isSynthetic()) {wrappedBean applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);}//调用Bean实例对象初始化的方法这个初始化方法是在Spring Bean定义配置//文件中通过init-method属性指定的try {invokeInitMethods(beanName, wrappedBean, mbd);}catch (Throwable ex) {throw new BeanCreationException((mbd ! null ? mbd.getResourceDescription() : null),beanName, Invocation of init method failed, ex);}//对BeanPostProcessor后置处理器的postProcessAfterInitialization//回调方法的调用为Bean实例初始化之后做一些处理if (mbd null || !mbd.isSynthetic()) {wrappedBean applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);}return wrappedBean;}三级缓存解决循环依赖 循环依赖 在A创建的过程中A的属性B需要注入属性A singletonObjects一级缓存earlysingletonObjects二级缓存singletonFactories三级缓存private final MapString, Object singletonObjects new ConcurrentHashMap(256); private final MapString, ObjectFactory? singletonFactories new HashMap(16); private final MapString, Object earlySingletonObjects new ConcurrentHashMap(16); 创建的A放入 Set singletonsCurrentlyInCreation只要创建就放入set表示bean正在初始化首先是实例化new 普通对象addSingletonFactory(beanName, () - getEarlyBeanReference(beanName, mbd, bean));为了防止循环引用尽早持有对象的引用第二个参数是一个lamda表达式可用来获取普通对象在A填充B时B需要注入A判断A正在初始化此时出现循环依赖先向二级缓存里查找在多方循环中保证创建的是都是同一个代理对象A再向三级缓存里查找没有则执行lamda获取普通对象并且进行AOP生成代理对象放入bean到二级缓存中填充其他的属性进行Aop的逻辑若是循环依赖则会提前进行Aopstep5而不是现在在二级缓存里查找是不是已经有已经生成好的bean添加到单例池Set中removeA标识初始化完成
- 上一篇: 百度seo网站排名专业视频剪辑培训机构
- 下一篇: 百度seo怎么做网站内容优化品牌购买网站
相关文章
-
百度seo网站排名专业视频剪辑培训机构
百度seo网站排名专业视频剪辑培训机构
- 技术栈
- 2026年03月21日
-
百度SEO网站wordpress 社交模板
百度SEO网站wordpress 社交模板
- 技术栈
- 2026年03月21日
-
百度seo公司整站优化工程建设招标中心网站
百度seo公司整站优化工程建设招标中心网站
- 技术栈
- 2026年03月21日
-
百度seo怎么做网站内容优化品牌购买网站
百度seo怎么做网站内容优化品牌购买网站
- 技术栈
- 2026年03月21日
-
百度不收录手机网站吗奥地利网站后缀
百度不收录手机网站吗奥地利网站后缀
- 技术栈
- 2026年03月21日
-
百度不收录网站关键词网站自己怎么做优化
百度不收录网站关键词网站自己怎么做优化
- 技术栈
- 2026年03月21日






