本文僅供學(xué)習(xí)交流使用,侵權(quán)必刪捧挺。
不作商業(yè)用途虑绵,轉(zhuǎn)載請(qǐng)注明出處
BeanFactory
BeanFactory是Spring Bean容器的根接口,包含了基本對(duì)于Spring Bean操作的接口定義闽烙,如下圖
ApplicationContext
ApplicationContext是BeanFactory的子類翅睛,從Spring官網(wǎng)解釋,ApplicationContext是在BeanFactory的基礎(chǔ)上做一個(gè)補(bǔ)充:
- 更容易聚合AOP特性
- 消息資源管理(用于國際化)
- 事件發(fā)布
- 應(yīng)用層特定的上下文黑竞,例如Web應(yīng)用程序中使用的WebApplicationContext
BeanFactory與ApplicationContext的關(guān)系
從代碼來看捕发,以AnnotationConfigApplicationContext為例。AnnotationConfigApplicationContext的getBean方法是父類AbstractApplicationContext實(shí)現(xiàn)的
getBean()的這個(gè)方法是從getBeanFactory()返回的beanFactory中獲取bean很魂,在AbstractApplicationContext只是一個(gè)抽象方法
具體的實(shí)現(xiàn)在GenericApplicationContext中爬骤,返回的是DefaultListableBeanFactory,這個(gè)也是BeanFactory的一個(gè)實(shí)現(xiàn)類
看了源碼后可以看出ApplicationContext使用了代理模式莫换,在Spring Bean容器外充當(dāng)了一層代理霞玄,真正在管理Spring Bean對(duì)象的是DefaultListableBeanFactory
總結(jié)
總的來說,BeanFactory提供了Spring容器最基本的功能拉岁,而ApplicationContext是在BeanFactory的基礎(chǔ)上添加了更多特定于企業(yè)的一些功能坷剧。ApplicationContext是BeanFactory一個(gè)完整的超集