天天用 Spring,bean 实例化原理你懂吗

编程入门 行业动态 更新时间:2024-10-11 01:12:10

天天用 Spring,bean 实例化原理<a href=https://www.elefans.com/category/jswz/34/1764285.html style=你懂吗"/>

天天用 Spring,bean 实例化原理你懂吗

本次主要想写spring bean的实例化相关的内容。创建spring bean 实例是spring bean 生命周期的第一阶段。

 

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

 

  • 创建bean的实例

  • 给实例化出来的bean填充属性

  • 初始化bean

  • 通过IOC容器使用bean

  • 容器关闭时销毁bean

 

在实例化bean之前在BeanDefinition里头已经有了所有需要实例化时用到的元数据,接下来spring 只需要选择合适的实例化方法以及策略即可。实例化方法有两大类分别是工厂方法和构造方法实例化,后者是最常见的。

 

spring默认的实例化方法就是无参构造函数实例化。

 

如我们在xml里定义的 <bean id="xxx" class="yyy"/> 以及用注解标识的bean都是通过默认实例化方法实例化的。

 

  • 两种实例化方法(构造函数 和 工厂方法)

  • 源码阅读

  • 实例化策略(cglib or 反射)

 

 

两种实例化方

 

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

 

代码演示

 

启动容器时会实例化所有注册的bean(lazy-init懒加载的bean除外),对于所有单例非懒加载的bean来说当从容器里获取

bean(getBean(String name))的时候不会触发,实例化阶段,而是直接从缓存获取已准备好的bean,而生成bean的时机则是下面这行代码运行时触发的。

 

@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();}
}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd  .xsd"><bean id="factoryInstance" class="spring.service.instance.MyBeanFactory" factory-method="getInstanceStatic"/></beans>

 

输出结果为:

 

instance by FactoryInstance

 

2.实例工厂方法

 

public class MyBeanFactory {    /*** 实例工厂创建bean实例** @return*/public FactoryInstance getInstance() {        return new FactoryInstance();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd  .xsd">

更多推荐

天天用 Spring,bean 实例化原理你懂吗

本文发布于:2024-03-05 09:32:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1711934.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:你懂   实例   原理   Spring   bean

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!