关于Spring IOC容器

注:都是从net的各个角落找到的,如涉及到版权请联系我,君并无意冒犯。

1,spring容器的三种加载方式:

(1)FileSystemXmlApplicationContext
这个方法是从文件绝对路径加载配置文件,例如:
ApplicationContext ctx = new FileSystemXmlApplicationContext( "G:/Test/applicationcontext.xml ");
如果在参数中写的不是绝对路径,那么方法调用的时候也会默认用绝对路径来找,我测试的时候发现默认的绝对路径是eclipse所在的路径。
采用绝对路径的话,程序的灵活性就很差了,所以这个方法一般不推荐。(如果要使用classpath路径,需要加入前缀classpath: )
(2)ClassPathXmlApplicationContext
这个方法是从classpath下加载配置文件(适合于相对路径方式加载),例如:
ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationcontext.xml ");
该方法参数中classpath: 前缀是不需要的,默认就是指项目的classpath路径下面;

这也就是说用ClassPathXmlApplicationContext时默认的根目录是在WEB-INF/classes下面,而不是项目根目录。这个需要注意!

(3)XmlWebApplicationContext
专为web工程定制的方法,推荐Web项目中使用。例如:
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

2,关于applicationContext与beanFactory的区别:

 (口语)applicationContext是对beanFactory的强化,增加了很多功能。

 (专业) --a) BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

                 --b)ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:

                                1. 国际化支持
                                    2. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
                                    3. 事件传递:通过实现ApplicationContextAware接口

  (总结)Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类。事实上,Spring提供了两种不同的容器:一种是最基本的BeanFactory,另一种是扩展的                                  ApplicationContext。BeanFactory 仅提供了最基本的依赖注入支持,而 ApplicationContext 则扩展了BeanFactory ,提供了更多的额外功能。

  (区别)BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有的单实例                     的Bean。因此ApplicationContext的初始化时间会比BeanFactory稍长一些.

 

猜你喜欢

转载自www.cnblogs.com/javaloverx/p/9638077.html