zoukankan      html  css  js  c++  java
  • Spring启动流程分析

    Spring启动流程分析

    如何启动一个Spring容器

    启动一个Spring容器最简单的方式如下:

    @Configuration
    @ComponentScan(basePackages = "cn.wyk.primary.spring.ioc")
    public class App {
    	public static void main(String[] args) {
    		AnnotationConfigApplicationContext ctc = new AnnotationConfigApplicationContext(App.class);
    		PrimaryService primaryService = (PrimaryService)ctc.getBean("primaryService");
    		System.out.println(primaryService);
    	}
    }
    

    上述代码演示了使用AnnotationConfigApplicationContext对象启动Spring容器的一种方式,除此之外Spring还支持其他的几个启动类来启动Spring;

    如:
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("SpringBean.xml");

    或者通过文件路径的方式:

          String path = this.getClass().getClassLoader().getResource("").getPath();
          System.out.println("path = " + path);
          String filepath = path + "/applicationContext.xml";
    
          ApplicationContext ac = new FileSystemXmlApplicationContext(filepath); 
          Object bean = ac.getBean("fieldInfo");
    

    甚至可以更灵活的方式:

    GenericApplicationContext ctx = new GenericApplicationContext();
    //使用XmlBeanDefinitionReader
    XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
    //加载ClassPathResource
    xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
    PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(ctx);
    propReader.loadBeanDefinitions(new ClassPathResource("otherBeans.properties"));
    //调用Refresh方法
    ctx.refresh();
    
    //和其他ApplicationContext方法一样的使用方式
    MyBean myBean = (MyBean) ctx.getBean("myBean");
    

    Spring初始化过程中都干了啥

    第一部分,我们了解了如何启动一个一个Spring容器,这一部分将会分析下Spring启动过程都干了什么
    Spring Start
    在new XXXApplicationContext()的方法里主要有三个操作

    • this()
    • register()
    • refresh()

    先来看看this方法里面都做了些什么(AnnotationConfigApplicationContext 构造过程):

  • 相关阅读:
    PKU 1185-炮兵阵地(状压DP)
    pku1113-Wall 凸包(安德鲁算法版)
    PTA 6-15 用单向循环链表实现猴子选大王 (20 分)
    PTA 6-14 用单向链表完成多项式运算(35分)
    离散化
    Warshall算法求传递闭包及具体实现
    HDU-6185-Covering(推递推式+矩阵快速幂)
    链式前向星
    HDU Queuing(递推+矩阵快速幂)
    【node】------mongoose的基本使用------【巷子】
  • 原文地址:https://www.cnblogs.com/wykCN/p/14033416.html
Copyright © 2011-2022 走看看