Spring 源码分析之 bean 实例化原理

目录

1、Sring bean 实例化        

2、两种实例化方法

3、源码阅读

4、实例化策略(cglib or 反射)


1、Sring bean 实例化        

        本文谈一下Spring bean的实例化相关的内容。创建Spring bean 实例是Spring bean 生命周期的第一阶段。bean 的生命周期主要有如下几个步骤:

  • 创建bean的实例
  • 给实例化出来的bean填充属性
  • 初始化bean
  • 通过IOC容器使用bean
  • 容器关闭时销毁bean

        在实例化bean之前在BeanDefinition里头已经有了所有需要实例化时用到的元数据,接下来Spring 只需要选择合适的实例化方法以及策略即可。实例化方法有两大类分别是工厂方法构造方法实例化,后者是最常见的。Spring默认的实例化方法就是无参构造函数实例化。
如我们在xml里定义的 以及用注解标识的bean都是通过默认实例化方法实例化的。

  • 两种实例化方法(构造函数 和 工厂方法)
  • 源码阅读
  • 实例化策略(cglib or 反射)

2、两种实例化方法

使用适当的实例化方法为指定的bean创建新实例:工厂方法,构造函数实例化。

启动容器时会实例化所有注册的bean(lazy-init懒加载的bean除外),对于所有单例非懒加载的bean来说当从容器里获取bean(getBean(String name))的时候不会触发,实例化阶段,而是直接从缓存获取已准备好的bean,而生成bean的时机则是下面这行代码运行时触发的。更多关于懒加载的内容可以参考这篇文章。
Spring lazy-init 原理分析

@Test
public void testBeanInstance(){
    // 启动容器
    ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
}

第一、 使用工厂方法实例化(很少用)

1.静态工厂方法

public class FactoryInstance {

    public FactoryInstance() {
        System.out.println("instance by FactoryInstance");
    }
}
public class MyBeanFactory {

    public static FactoryInstance getInstanceStatic(){
        return new FactoryInstance();
    }
}



    

输出结果为:

instance by FactoryInstance

2.实例工厂方法

public class MyBeanFactory {

    /**
     * 实例工厂创建bean实例
     *
     * @return
     */
    public FactoryInstance getInstance() {
        return new FactoryInstance();
    }
}


    
                    

你可能感兴趣的:(Spring,源码分析之,bean,实例化原理,Spring)