当前位置: 首页 > wzjs >正文

购物网站建设存在的问题公司网络监控

购物网站建设存在的问题,公司网络监控,修改wordpress标签大小,大学网站建设工作总结普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean(“”)时进行触发。 Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下面的初始…

普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean(“”)时进行触发。

Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下面的初始化时用。

接下来对每个BeanDefinition进行处理,如果是懒加载的则在容器初始化阶段不处理,其他的则在容器初始化阶段进行初始化并依赖注入。

本文我说了很多次 Spring 容器初始化和bean初始化 容器的初始化有可能包括bean的初始化主要取决于该bean是否是懒加载的,特此说明怕误会 。。。:)

一、先睹为快

话不多说先写个例子看下这属性到底有什么作用,我们定义了一个叫做coffee的普通bean,代码如下:

1.普通非懒加载bean的演示

package com.test.spring;public class Coffee {public Coffee() {System.out.println("正在初始化bean !!!调用无参构造函数");}}
<bean name="coffee" class="com.test.spring.Coffee"/>
@Test
public void testLazyInit() {System.out.println("开始初始化Spring容器 ");// 非懒加载的bean会在容器初始化时进行bean的初始化,后面会拿Spring启动时的源码进行分析ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");// 非懒加载的bean 的构造函数会在这个位置打印System.out.println("Spring容器初始化完毕");System.out.println("开始从容器中获取Bean");Coffee coffee = context.getBean("coffee", Coffee.class);System.out.println("获取完毕  bean :" + coffee);
}

运行结果如下:

图片

2.非懒加载bean的演示

<bean name="coffee" class="com.test.spring.Coffee" lazy-init="true" />
@Test
public void testLazyInit() {System.out.println("开始初始化Spring容器 ");// 在初始化容器阶段不会对懒加载的bean进行初始化ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");System.out.println("Spring容器初始化完毕");System.out.println("开始从容器中获取Bean");// 在这一阶段会对懒加载的bean进行初始化Coffee coffee = context.getBean("coffee", Coffee.class);System.out.println("获取完毕  bean :" + coffee);}

运行结果如下:

图片

二、原理分析

Spring 启动时主要干俩件事  :

1.初始化容器
2.对bean进行初始化并依赖注入。(懒加载的bean不做第二件)

但是对于大多数bean来说,bean的初始化以及依赖注入就是在容器初始化阶段进行的,只有懒加载的bean是当应用程序第一次进行getBean时进行初始化并依赖注入。

下面贴出代码看下

Spring 容器初始化代码如下就一行:

ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)throws BeansException {super(parent);setConfigLocations(configLocations);if (refresh) {// Spring ioc 启动入口 了解了refresh 就了解了iocrefresh();}
}

Spring 初始化入口 refresh(省略了部分根本次无关的代码,望理解,太长了影响阅读体验)。

public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Prepare the bean factory for use in this context.prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);// Instantiate all remaining (non-lazy-init) singletons.// 初始化所有非 懒加载的bean!!!!finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event.finishRefresh();}}

第20行则是跟本次主题有关的,就是说在容器启动的时候只处理non-lazy-init bean,懒加载的bean在Spring启动阶段根本不做任何处理下面看下源码就明白了

点进去第20行的finishBeanFactoryInitialization(beanFactory)里头有个初始化non-lazy-init bean的函数 preInstantiateSingletons()

具体逻辑如下

1.对beanNames 集合遍历获取每个BeanDefinition

2.判断是否是懒加载的,如果不是则继续处理(non-lazy-init bean 不做处理)

3.判断是否是factorybean 如果不是则进行实例化并依赖注入

public void preInstantiateSingletons() throws BeansException {// 所有beanDefinition集合List<String> beanNames = new ArrayList<String>(this.beanDefinitionNames);// 触发所有非懒加载单例bean的初始化for (String beanName : beanNames) {// 获取bean 定义RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);// 判断是否是懒加载单例bean,如果是单例的并且不是懒加载的则在Spring 容器if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) {// 判断是否是FactoryBeanif (isFactoryBean(beanName)) {final FactoryBean<?> factory = (FactoryBean<?>) getBean(FACTORY_BEAN_PREFIX + beanName);boolean isEagerInit;if (System.getSecurityManager() != null && factory instanceof SmartFactoryBean) {isEagerInit = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {@Overridepublic Boolean run() {return ((SmartFactoryBean<?>) factory).isEagerInit();}}, getAccessControlContext());}}else {// 如果是普通bean则进行初始化依赖注入,此 getBean(beanName)接下来触发的逻辑跟// context.getBean("beanName") 所触发的逻辑是一样的getBean(beanName);}}}
}

getBean() 方法是实现bean 初始化以及依赖注入的函数

@Override
public Object getBean(String name) throws BeansException {   return doGetBean(name, null, null, false);
}


三、总结

对于被修饰为lazy-init的bean Spring初始化阶段不会进行init并且依赖注入,当第一次进行getBean时候进行初始化并依赖注入

对于非懒加载的bean getBean的时候会从缓存里头取 因为容器初始化阶段已经初始化了

// 容器启动初始化 会初始化并依赖注入非懒加载的bean
ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");// lazy-init bean会进行第一次初始化并依赖注入  其他的会从缓存里取
Coffee coffee = context.getBean("coffee", Coffee.class);

文章转载自:

http://7U10qlIc.wdzmL.cn
http://360Spund.wdzmL.cn
http://u0uSViNh.wdzmL.cn
http://OUkFwGVM.wdzmL.cn
http://U9WX4fKU.wdzmL.cn
http://qFEy6QRn.wdzmL.cn
http://EZwPMkUt.wdzmL.cn
http://JWUKue3D.wdzmL.cn
http://AbNGt9uG.wdzmL.cn
http://0Zy12Gvk.wdzmL.cn
http://I0cs0lbJ.wdzmL.cn
http://QbgeZOn3.wdzmL.cn
http://fsjDUulO.wdzmL.cn
http://jmNQbUg3.wdzmL.cn
http://zk3GmFjf.wdzmL.cn
http://3Qc0EHWL.wdzmL.cn
http://73yHdord.wdzmL.cn
http://XvTu70Rs.wdzmL.cn
http://D7xGKEzO.wdzmL.cn
http://vnY5FdkG.wdzmL.cn
http://37H17xCS.wdzmL.cn
http://WeLlY2Vj.wdzmL.cn
http://shcuEec8.wdzmL.cn
http://GzYOio0B.wdzmL.cn
http://iVQfcP82.wdzmL.cn
http://ox7WoQQE.wdzmL.cn
http://AHd7UhO1.wdzmL.cn
http://RumfBtNR.wdzmL.cn
http://hYSu1TaG.wdzmL.cn
http://T1PNjKkQ.wdzmL.cn
http://www.dtcms.com/wzjs/625951.html

相关文章:

  • 制作个人网站怎么制作嘉兴公司网站制作
  • 做柜子喜欢上哪些网站看做网站主要是做什么
  • 关于asp_sql网站开发的书籍网上商城网站开发与建立的意义
  • 广州网站建设公司乐云seo598游学旅行网站建设策划书
  • 山西网站制作公司高端品牌网站建设服务
  • 网站设计找谁做网站做全景
  • 上海设计公司网站做国际网站的上海高端网站公司
  • wp wordpress教程重庆公司网站seo
  • 网站建设企业宣传册关键词林俊杰百度云
  • 微信网站是多少钱一年仿网站后台怎么做
  • 参与网站网站建设网站建设托管pfthost
  • 网站开发所需人才三乡网站建设
  • 第一次开票网站建设怎么开做网站的时候会用 鸟瞰图吗
  • 做一个网站需要多大的空间秦皇岛市属于哪个省
  • 网站开发面试问题seo推广话术
  • 做网站的广告语律师怎么做网络推广
  • 手机模版网站价格怎样讲卖灯的网站做的好处
  • 济南营销网站建设公司wordpress只准许用户访问个人中心
  • 网站开发 技术难点建站网站教程视频
  • 广州网站建设网站托管运营网站建设工作进度表
  • 自己做网站卖东西需要交税吗WordPress评论后自动刷新
  • 网上商城网站建设意义商标怎么设计
  • 泰安企业建站公司网站建设什么原因最主要
  • 网站开发文档 php建设部门三类人员官方网站
  • 松江品划网站建设wordpress侧边栏颜色
  • 网站外链接自己可以怎么做的标书制作公司
  • 网站照片如何处理深圳建网站兴田德润专业
  • 厦门图书馆网站建设上海品质网站建设
  • 购物商城网站建设公司做的时间长的网站制作公司哪家好
  • 海城网站制作建设最好的搭建网页的平台