zoukankan      html  css  js  c++  java
  • Spring处理器

    在基于Spring的应用中,你的应用对象生存于Spring容器中。Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。

    Spring自带了多个容器实现,可以归为两种不同的类型。bean工厂是最简单的容器,提供基本的DI支持;应用上下文基于beanFactory构建,并提供应用框架级别的服务。

    Spring自带了多种类型的应用上下文。下面五种是常用的:

    AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文

    AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文

    ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源

    FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义

    XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义

    使用FileSystemXmlApplicationContext和使用ClassPathXmlApplicationContexte的区别在于FileSystemXmlApplicationContext在指定的文件系统路径下查找xml文件,而ClassPathXmlApplicationContext是在所有类路径下查找xml文件。

    若想从Java配置文件中加载应用上下文,可以使用AnnotationConfigApplicationContext:

    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

    Spring容器内部工作机制 
    Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义了Spring容器在加载配置文件后的各项处理过程。 
    refresh()内部定义的执行逻辑 
    //初始化BeanFactory:根据配置文件实例化BeanFactory,getBeanFactory()方法由具体子类实现。 
    //Spring将配置文件的信息载入到容器的Bean(BeanDefinitionRegistry)定义注册表中,当此时Bean还为未初始化。 
    ConfigurableListableBeanFactory beanFactory = getBeanFactory(); 

    //调用工厂后处理器:根据反射机制从BeanDefinitionRegistry中找出所有BeanFactoryPostProcessor类型的Bean,并调用其postProcessBeanFactory()接口方法 
    invokeBeanFactoryPostProcessors(); 

    //注册Bean后处理器:根据反射机制从BeanDefinitionRegistry中找出所有BeanPostProcessor类型的Bean 
    //并将它们注册到容器Bean后处理器的注册表中 
    registerBeanPostProcessors(); 

    //初始化消息源:初始化容器的国际化信息资源 
    initMessageSource(); 

    //初始化应用上下文事件广播器 
    initApplicationEventMulticaster(); 

    //初始化其他特殊的Bean:这是一个钩子方法,子类可以借助这个方法执行一些特殊的操作 
    onRefresh(); 

    //注册事件监听器 
    registerListener(); 

    //初始化所有单实例的Bean,使用懒初始化模式的Bean除外:初始化Bean后,将它们放入Spring容器的缓存中 
    finishBeanFactoryInitialization(bean Factory): 

    //发布上下文刷新事件:创建上下文刷新事件,事件广播器负责将这些事件广播到每个注册的事件监听器中 
    finishRefresh(); 

  • 相关阅读:
    Ubuntu下使用Sysvinit实现自定义服务(简单研究)
    Linux初始化init系统-Sysvinit、Upstart、Systemd
    Ubuntu查看系统版本的方法
    Linux查看文件内容命令:more(转)
    Linux查看文件内容命令:less(转)
    Ubuntu 16.04下MySQL 5.7.18取消开机启动(解决无法使用Sysvinit(update-rc.d/sysv-rc-conf)脚本关闭)
    为什么说Ubuntu的运行级别为2
    Ubuntu 16.04开机进入命令行(tty1)+分辨率调节+字体颜色设置+中文乱码解决(解决虚拟终端Ctrl+Alt+F1分辨率太大)
    Linux运行级别研究(转)
    Linux服务管理(Ubuntu服务管理工具sysv-rc-conf)(转)
  • 原文地址:https://www.cnblogs.com/forerver-elf/p/4724218.html
Copyright © 2011-2022 走看看