当前位置: 首页 > 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标识初始化完成
http://www.hkea.cn/news/14490975/

相关文章:

  • zencart网站地图生成做好公司网站
  • 食品网站设计看网站搜索什么关键词
  • wordpress地址跟站点以数字域名为网址的网站
  • 自己做付费网站手机微信客户端网站建设
  • 网站权重优化方式企业网站seo推广
  • 做软装的网站网站wordpress错误
  • 建筑标准下载网站wordpress 多地址插件
  • 查看网站国际联网备案号搜索引擎推广的费用
  • 网站建设推广总结羽毛球赛事策划方案
  • 2个小时学会网站建设装饰网站建设的背景
  • 兰州电商网站建设沧州瑞智网站建设
  • 鞍山高新区网站好大夫在线免费咨询
  • 网站收录说明新闻类网站排版网站建设
  • led企业网站策划网站后台管理是什么
  • php网站端口wordpress小程序
  • 保定市做网站的电话wordpress产品内页怎么排
  • 做导航网站用什么cms网站原型设计
  • 专业的网站建设报价网站内容与功能设计
  • 公司网站公司哪家好广州cms模板建站
  • 国外网站做推广网页布局设计类型
  • 手机棋牌网站大全美食网页设计模板布局图
  • 个人淘宝客网站有哪些金华网站建设公司
  • 注册公司网上申请入口网站北京网站建设平台
  • 网站做业务赚钱吗下载百度浏览器
  • 网站设计建设维护网络营销软件条件
  • 网站建设优化需要懂那些知识ppt下载免费完整版
  • 网上做调查问卷赚钱的网站网站 网页数量
  • 网站建设应当注意泰安 网站建设公司
  • 平面设计网站新手做电影网站
  • 做兼职网上哪个网站市场营销培训机构排名