spring的IOC容器ApplicationContext和BeanFactory

MrFuWen 2020-06-09

beanfactory是ioc的基础容器,它主要的实现类XmlBeanFactory 类,这个容器从一个 XML 文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。注意和FactoryBean的区别

这里要自己的要注意的问题:

        1)假如自己来实现,怎么把对象进行注入,什么时候注入,怎么解决循环依赖的问题

        2)注入是用的是BeanDefination,那么是怎么把class文件跟它联系起来的,主要使用哪些属性

        3)怎么让第三方框架把自己的属性注入进来的,然后如何进行很好的调用

        4) 对于使用者来说,怎么进行来扩展或者使用一些修改的功能 BeanPostProcessor 

        5)  注意这里用了什么好的方式,自己可以借鉴的

ApplicationContext继承了BeanFactory,但是这个可以理解为应用上下文,

        1) 国际化(MessageSource)

        2) 访问资源,如URL和文件(ResourceLoader)

        3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层  ,

        4) 消息发送、响应机制(ApplicationEventPublisher)

        5) AOP(拦截器)

  • FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。

  • ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。

  • WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。
  • AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文。避免使用application.xml进行配置。相比XML配置,更加便捷,用到的注解是@Configuration和@Bean

ApplicationContext 包含 BeanFactory 所有的功能,一般情况下,相对于 BeanFactory,ApplicationContext 会更加优秀。当然,BeanFactory 仍可以在轻量级应用中使用,比如移动设备或者基于 applet 的应用程序。

相关推荐