spring的IOC容器ApplicationContext和BeanFactory
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 的应用程序。