• Spring ioc容器


    一、ioc容器

    ioc (inversion of  control)即控制反转,把某一个接口选择实现类的控制权转移给Spring容器来管理。调用类对该实现类的依赖关系由ioc容器注入(DI),传统的应用程序我们都是在类内部创建依赖对象,而Spring采用依赖注入的方式即 DI ,从而降低了类与类之间的耦合度。

    一般我们把BeanFactory称为ioc容器,把ApplicationContext称为应用上下文,是Spring的核心。

    二、当Spring容器启动时,首先会读取配置文件中的相关信息,并在Spring容器中生成一份bean配置信息注册表(BeanDefinition),然后根据配置信息注册表实例化bean装配bean之间的依赖关系,然后将bean实例放入bean缓存池中供应用程序使用。bean缓冲池由HashMap实现的,以bean的beanName为键。

    三、BeanFactory

    继承关系

    BeanFactory bf=new XmlBeanFactory(new ClassPathResource("beans.xml"));
    bf.getBean("");
    ResourcePatternResolver rpr=new PathMatchingResourcePatternResolver();
            Resource r=rpr.getResource("com/lq/ioc/beans.xml");
            BeanFactory bf=new XmlBeanFactory(r);

    ApplicationContext

    继承关系

    ApplicationContext ctx =new ClassPathXmlApplicationContext("com/lq/ioc/beans.xml");
    
            ApplicationContext ctx =new FileSystemXmlApplicationContext("com/lq/ioc/beans.xml");
    
            ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"conf/beans1.xml","conf/beans2.xml"});

    ApplicationContext和BeanFactory的区别:

    1、ApplicationContext 在容器启动时会把所有单实例的bean放入缓冲池中,可以通过配置lazy-init=true来延迟加载,  BeanFactory则采用延迟加载的形式,在容器启动时并不会实例化bean,直到第一次加载的时候才去实例化bean.对于单实例的bean,ApplicationContext中每次取出来都是同一个,而BeanFactory则每次取出来的是不同的bean.

    2、两者均支持BeanPostProcessor、BeanFactoryPostProcessor(后置处理器)的使用,但是BeanFactory要通过  addBeanPostProcessor(new MyBeanPost())来手动注册,ApplicationContext则不需要手动注册。

    WebApplicationContext

    只能在web环境中使用,从WebApplicationContext中可以获得ServletContext的引用,整个web应用上下文对象将作为属性放入ServletContext中,Spring提供一个工具类WebApplicationContextUtils中的getWebApplicationContext(ServletContext sc)可以获得WebApplicationContext实例。

    继承关系

     由于 Web 应用比一般的应用拥有更多的特性,因此WebApplicationContext 扩展了ApplicationContext。WebApplicationContext 定义了一个常量ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,在上下文启动 时,WebApplicationContext 实例即以此为键放置在ServletContext 的属性列表中,因此我们可以直接通过以下语句从Web 容器中获取
    WebApplicationContext:
    WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(
    WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

    在web.xml文件中的配置 

    1、使用监听的方式
    <
    context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/student.xml, /WEB-INF/person.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>/WEB-INF/student.xml, /WEB-INF/person.xml </param-value>  
    </context-param>  
      
    <servlet>  
        <servlet-name>springContextLoaderServlet</servlet-name>  
        <servlet-class>org.springframework.web.context.ContextLoaderServlet </servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  • 相关阅读:
    nginx的基础使用
    npm的一些细节
    webpack打包多页面
    右键打开命令窗口
    本地建立服务器
    would you please...could you please...两句区别是什么?
    Mockito/PowerMockito Straige Issues
    pip install pyinstaller
    20171211
    Chrome 扩展
  • 原文地址:https://www.cnblogs.com/coderising/p/5813850.html
Copyright © 2020-2023  润新知