zoukankan      html  css  js  c++  java
  • spring初次体验

    1.BeanFactory:实际上是实例化,配置和管理众多bean的容器。这些bean通常会彼此合作,因而它们之间会相互依赖。BeanFactory使用的配置数据可以反映这些依赖关系中(一些依赖可能不像配置数据一样可见,而是在运行期作为bean之间程序交互的函数)。

    一个BeanFactory可以用接口org.springframework.beans.factory.Beanfactory表示,这个接口有多个实现。最常使用的简单的BeanFactory实现是org.springframe.beans.factory.xml.XmlBeanfactory

    (ApplicationContext)是BeanFactory的子类,所以大部分的用户更喜欢使用ApplicationContext的xml格式。

    虽然大多数情况下,几乎所有被BeanFactory管理的用户代码都不要知道BeanFactory,但是BeanFactory也会被某种方式实例化。可以使用下面的代码实例化BeanFactory。

    InputStream is=new FileInputStream("beans.xml");
    XmlBeanFactory bis=new XmlBeanFactory(is);

    或者

    ClassPathResource res=new ClassPathResource("beans.xml");
    XmlBeanFactory bis=new XmlBeanFactory(res);

    或者

    ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
            new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
    // of course, an ApplicationContext is just a BeanFactory
    BeanFactory factory = (BeanFactory) appContext;

    很多情况下,用户代码不需要实例化BeanFactory, 因为Spring框架代码会做这件事。例如,web层提供支持代码,在J2EE web应用启动过程中自动载入一个Spring ApplicationContext。这个声明过程在这里描述:

    编程操作BeanFactory将会在后面提到,下面部分将集中描述BeanFactory的配置.

    一个最基本的BeanFactory配置由一个或多个它所管理的Bean定义组成。在一个XmlBeanFactory中,根节点beans中包含一个或多个bean元素。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>  
      <bean id="..." class="...">
        ...
      </bean>
      <bean id="..." class="...">
        ...
      </bean>
      ...
    </beans>

     2.作用域session和request的意义:

    request表明该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前的HTTP request内有效,配置实例

    request .session. global session使用的时候首先要在初始化的时候首先要在web.xml中做出如下配置:

    如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:

    <web-app>
       ...
      <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
      </listener>
       ...
    </web-app>

    如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现:

    <web-app>
     ..
     <filter> 
        <filter-name>requestContextFilter</filter-name> 
        <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
     </filter> 
     <filter-mapping> 
        <filter-name>requestContextFilter</filter-name> 
        <url-pattern>/*</url-pattern>
     </filter-mapping>
       ...
    </web-app>

    接着就可以使用bean的作用域了

    <bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>

    session表明该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前的HTTP session内有效,和request配置条件一样,也需要在web.xml中进行配置

    <bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>

    3.bean的生命周期

    1. 容器启动,实例化所有实现了BeanFactoyPostProcessor接口的类。他会在任何普通Bean实例化之前加载.
    2. 实例化剩下的Bean,对这些Bean进行依赖注入。
    3. 如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用
    4. 如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用
    5. 如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用
    6. 如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessBeforeInitialization方法
    7. 如果Bean有实现InitializingBean接口那么对这些Bean进行调用
    8. 如果Bean配置有init属性,那么调用它属性中设置的方法
    9. 如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessAfterInitialization方法
    10. Bean正常是使用
    11. 调用DisposableBean接口的destory方法
    12. 调用Bean定义的destory方法

    如果从大体上区分值分只为四个阶段

    1. BeanFactoyPostProcessor实例化
    2. Bean实例化,然后通过某些BeanFactoyPostProcessor来进行依赖注入
    3. BeanPostProcessor的调用.Spring内置的BeanPostProcessor负责调用Bean实现的接口: BeanNameAware, BeanFactoryAware, ApplicationContextAware等等,等这些内置的BeanPostProcessor调用完后才会调用自己配置的BeanPostProcessor
    4. Bean销毁阶段
  • 相关阅读:
    【声纹识别】 kaldi callhome diarization
    python3 类型提示
    公钥私钥,HTTPS,HTTP通俗讲解
    一图学会MySQL的JOIN
    链表翻转(看图学)
    如何理解 Python 的赋值逻辑
    Python十大排序算法
    Python-functools (reduce,偏函数partial,lru_cache)
    Python-类型注解(3.5引入)
    Python-装饰器
  • 原文地址:https://www.cnblogs.com/chimingyang/p/5992811.html
Copyright © 2011-2022 走看看