13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Spring源码之Bean实例化基本原理

创建Spring Bean实例化是Spring Bean生命周期的第一阶段

Bean的生命周期主要有如下几个步骤:

「详细介绍:Spring In Action是这样讲的:」

在实例化Bean之前在BeanDefinition里头已经有了所有需要实例化时用到的元数据,接下来Spring只需要选择合适的实例化方法以及策略即可。

「BeanDefinition」

Spring容器启动的时候会定位我们的配置文件,加载文件,并解析成Bean的定义文件BeanDefinition

右边的Map里存储这bean之间的依赖关系的定义BeanDefinition,比如OrderController依赖OrderService这种

实例化方法有两大类分别是工厂方法和构造方法实例化,后者是最常见的。其中Spring默认的实例化方法就是无参构造函数实例化。

如我们在xml里定义的以及用注解标识的bean都是通过默认实例化方法实例化的

实例化方法

「使静态工厂方法实例化」

 
 
 
 
  1. public class FactoryInstance { 
  2.  
  3.     public FactoryInstance() { 
  4.         System.out.println("instance by FactoryInstance"); 
  5.     } 
 
 
 
 
  1. public class MyBeanFactory { 
  2.  
  3.     public static FactoryInstance getInstanceStatic(){ 
  4.         return new FactoryInstance(); 
  5.     } 
 
 
 
 
  1.  
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
  4.  
  5.     
  6.           factory-method="getInstanceStatic"/> 
  7.  

「使用实例工厂方法实例化」

 
 
 
 
  1. public class MyBeanFactory { 
  2.  
  3.     /** 
  4.      * 实例工厂创建bean实例 
  5.      * 
  6.      * @return 
  7.      */ 
  8.     public FactoryInstance getInstance() { 
  9.         return new FactoryInstance(); 
  10.     } 
 
 
 
 
  1.   
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  4.