Spring四种注入方式
文章目录
前言:
首先我看了很多博客 或者视频 对于Spring的注入方式理解其实都是错误的. 或者有问题的,
只有当你深入源码的时候你才会发现 官网的意图是怎样的
首先 官网介绍的输入模式有4种
在Spring的源码中有这样一段
首先是默认的no 然后是 名字注入 类型注入 构造器注入
其中名字注入和构造器注入是有很大误会的
Spring容器是如何创建一个bean的
下面的内容看不懂 可以不用太深入 随便看看就好
为什么要看这个流程呢? 我需要给你演示几种注入方式 真正的官方说明
首先在Spring环境下启动应用 Spring扫描带@Component @Service…类
一开始他并不会为这些类去创建实例对象
在Spring环境中
这个List 会保存 所有 由Spring 管理的Bean的名字 后面有大作用
Spring 在加载的时候会把所有需要由Spring容器管理的类 封装成Spring认识的Bean对象 就是这个BeanDefinition
看一下下面这个类 就是Spring在创建bean对象时候对 原类进行管理封装 我把注释都删了 想看的 可以去看看源码 其中有几个方法应该是见过的
比如void setScope(@Nullable String scope); isSingleton() 是否为单例呀
package org.springframework.beans.factory.config;
import org.springframework.beans.BeanMetadataElement;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.core.AttributeAccessor;
import org.springframework.lang.Nullable;
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;
int ROLE_APPLICATION = 0;
int ROLE_SUPPORT = 1;
int ROLE_INFRASTRUCTURE = 2;
void setParentName(@Nullable String parentName);
@Nullable
String getParentName();
void setBeanClassName(@Nu