bean的基本知识,bean注解的使用方法

首页 > 经验 > 作者:YD1662022-11-01 13:48:16

图片看不清的话,看文字吧:

四月 07, 2015 3:43:54 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from class path resource [beans.xml]

----------------实例化bean----------------------

InstantiationAware BeanPostProcessor. postProcess BeforeInstantiation

InstantiationAware BeanPostProcessor.postProcess AfterInstantiation

Instantiation AwareBeanPostProcessor.postProcess PropertyValues

----------------初始化bean----------------------

调用BeanNameAware.setBeanName()。

调用BeanFactoryAware.setBeanFactory()。

调用BeanPostProcessor.postProcess BeforeInitialization(), 将salary调整为800。

调用InitializingBean.afterPropertiesSet()。

调用init-method所指定的myInit(),将salary设置为600。

调用BeanPostProcessor.postProcess AfterInitialization(), getWorkType为空,设置为默认临时工

第一次从容器中获取worker

name:小强;workType:临时工;salary:600

修改第一次从容器中获取worker的workType

第一次从容器中获取worker(修改过后的)

name:小强;workType:正式工;salary:600

第二次从容器中获取worker

name:小强;workType:正式工;salary:600

查看worker1和worker2是否指向同一引用

worker1==worker2:true

四月 07, 2015 3:43:54 下午 org.springframework.beans.factory.xml.XmlBeanFactory destroySingletons

信息: Destroying singletons in org.springframework.beans.factory.xml.XmlBeanFactory@16905e: defining beans [worker]; root of factory hierarchy

----------------销毁bean----------------------

调用DisposableBean.destroy()。

调用destroy-method所指定的myDestroy()。

我们可以看到第二次获取worker时,直接从容器的缓存中获取,它们两个的指向的是同一个引用!切记!

四、ApplicationContext与beanfactory的区别

从ApplicationContext应用上下文容器中获取bean和从bean工厂容器中获取bean的区别?

具体案例:

1、从ApplicationContext中获取bean

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

当我们去实例化beans.xml,该文件中配置的bean被实例化,(该bean的scope是singleton(单例))

2、如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么容器的bean不被实例化,只有当你去使用getBean某个bean时(感谢hemi1995指出错别字),才会实时的创建

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));

factory.getBean("student");

结论:

1、如果使用ApplicationContext,则配置的bean如果是singleton(单例)不管你用不用都被实例化,好处就是可以预先加载,坏处是浪费内存,

2、如果是用BeanFactory,则当你实例化该对象的时候,配置的bean不会被马上实例化,当你使用的时候才会被实例化(就像延缓加载机制)好处就是节约内存,缺点是速度回降慢,

3规则:一般没有特殊的要求,应当使用ApplicationContext完成(90%以上的项目)

使用ApplicationContext三种经常用到的实现:

1、ClassPathXmlApplicationContext->从类路径加载

2、FileSystemXmlApplicationContext->从文件系统加载

举例:ApplicationContext ac = newFIleSystemXmlApplicationContext("C:\Users\Workspaces\MyEclipse

8.5\myspring\src\com\zqx\inter\beans.xml");

3、XmlWebApplicationContext->从web系统中加载(当tomcat启动的时候加载)

欢迎微信搜索关注:java进阶架构师私信关键字【架构】即可获取免费最新的2018Java架构学习资料(里面有并发编程、高性能及分布式、Jvm性能调优、Spring源码,redis深入,Springboot cloud等多个知识点的架构资料)

最新活动,双十一包邮送15本实体书,快快搜索公众号来参与吧!

bean的基本知识,bean注解的使用方法(17)

---------------------

作者:一杯甜酒

来源:CSDN

原文:https://blog.csdn.net/u012562943/article/details/50469095

版权声明:本文为博主原创文章,转载请附上博文链接!

上一页12345末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.