spring  在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property…
1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反射创建一个原始的 bean 对象,然后再向这个原始的 bean 对象中填充属性.对于填充属性这个过程,简单点来说,JavaBean 的每个属性通常都有 getter/setter 方法,我们可以直接调用 setter 方法将属性值设置进去.当然,这样做还是太简单了,填充属性的过程中还有许多事情要做.…
1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去创建,而是从缓存中获取.如果某个 bean 还未实例化,这个时候就无法命中缓存.此时,就要根据 bean 的配置信息去创建这个 bean 了.相较于getBean(String)方法的实现逻辑,创建 bean 的方法createBean(String, RootBeanDefinition, Obj…
1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一些建议.在做完必要的准备工作后,从本文开始,正式开始进入源码分析的阶段. 在本篇文章中,我将会详细分析BeanFactory的getBean(String)方法实现细节,getBean(String) 及所调用的方法总体来说实现上较为复杂,代码长度比较长.作为源码分析文章,本文的文章长度也会比较长,…
一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器,基于这种被动形式,我们就是对象被反转了. 二.Spring IoC容器的初始化和依赖注入 Bean的定义何处是花再Spring Ioc容器中是两大步骤,它是先定义,然后初始化和依赖注入. Bean的定义分为3步: (1)Resource定位,这步是Spring IoC容器根据开发者的配置,进行资源…
目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名首字母小写) 此种方式比较简单就不贴代码了 2.@Bean[导入的第三方包里面的组件] (注意一定要在这个配置类上加上@Configuration) 3.@Import[快速给容器中导入一个组件] 4.使用Spring提供的 FactoryBean(工厂Bean); 1).默认获取到的是工厂bean…
一.基于schema格式的注入 1.基本的注入方式 (属性注入方式) 根据setXxx()方法进行依赖注入,Spring只会检查是否有setter方法,是否有对应的属性不做要求 <bean id="student" class="com.lq.ioc.Student"> <property name="name" value="zhansan"></property> <propert…
1.IOC容器中Bean的生命周期 构造器函数 设置属性 初始化函数(在Bean配置中 init-method) 使用Bean 结束时关闭容器(在Bean中配置destroy-method) 2.Bean的后置处理器 实现 BeanPostProcess 接口(后置处理器会逐条扫描全部Bean,所以要在方法中要对Bean进行过滤) 2.1.实现接口中的方法 Object postProcessBeforeInitialization(Object bean, String beanName) 在…
IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostProcessor),进行初始化前处理 4.调用 Bean 的初始化方法 5.调用 Bean 后置处理器接口(BeanPostProcessor),进行初始化后处理 6.Bean 可以使用了 7.当容器关闭时, 调用 Bean 的销毁方法 8.在 Bean 的声明里设置 init-method 和 de…
1.@Bean 导入第三方的类或包的组件 2.包扫描+组件的标注注解(@ComponentScan: @Controller,@service,@Reponsitory,@Componet), 自己写的类 3.@Import[可以快速给容器中导入一个或者多个组件]        1@Import(要导入到容器中的组件):容器中就会自动注册这个组件,id默认是全类名 @Configuration @Import(value = {Student.class,Teacher.class}) publ…