Spring源码学习(七)---AbstractBeanDefinition

这里主要是使用org.springframework:spring-beans:5.2.0.RELEASE进行分析


1. 查看源码相关的快捷键

快捷键作用
Ctrl + Shift+i出现类似于预览的小窗口
Ctrl + Enter(接上步)完全打开源码
Ctrl + 鼠标左键一步到位打开源码 = Ctrl + Shift+i –>Ctrl + Enter
Alt+7查看类的有什么方法
ctrl+f12查看继承方法
ctrl+h查看接口的实现类
alt+7查看类的有什么方法

一. AbstractBeanDefinition

  1. AbstractBeanDefinition直接继承BeanDefiniton,实现了BeanDefinition定义的一系列操作,定义了描述Bean画像的一系列属性
    在这里插入图片描述

  2. GenericBeanDefinition的实例类中包含XML中所有的配置

  3. GenericBeanDefinition只是子类实现,大部分的属性都保存在AbstractBeanDefinition中

  4. AbstractBeanDefinition 相关子类
    在这里插入图片描述

2. AbstractBeanDefinition 源码相关的属性

public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
		implements BeanDefinition, Cloneable {
//	默认的SCOPE,默认是单例
	public static final String SCOPE_DEFAULT = "";

//	不进行自动装配
	public static final int AUTOWIRE_NO = AutowireCapableBeanFactory.AUTOWIRE_NO;

//	根据Bean的名字进行自动装配,即autowired属性的值为byname
	public static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;

//	根据Bean的类型进行自动装配,调用setter函数装配属性,即autowired属性的值为byType
	public static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;

//	自动装配构造函数的形参,完成对应属性的自动装配,即autowired属性的值为byConstructor
	public static final int AUTOWIRE_CONSTRUCTOR = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;

//通过Bean的class推断适当的自动装配策略(autowired=autodetect),如果Bean定义有有参构造函数,则通过自动装配构造函数形参,完成对应属性的自动装配(AUTOWIRE_CONSTRUCTOR),否则,使用setter函数(AUTOWIRE_BY_TYPE)
	@Deprecated
	public static final int AUTOWIRE_AUTODETECT = AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT;

	//	不进行依赖检查
	public static final int DEPENDENCY_CHECK_NONE = 0;

	//	如果依赖类型为对象引用,则需要检查
	public static final int DEPENDENCY_CHECK_OBJECTS = 1;

	//	对简单属性的依赖进行检查
	public static final int DEPENDENCY_CHECK_SIMPLE = 2;
	//	对所有属性的依赖进行检查
	public static final int DEPENDENCY_CHECK_ALL = 3;

	//若Bean未指定销毁方法,容器应该尝试推断Bean的销毁方法的名字
	public static final String INFER_METHOD = "(inferred)";

	//	Bean的class对象或是类的全限定名
	@Nullable
	private volatile Object beanClass;

	//bean的作用范围,对应bean属性scope是单例
	@Nullable
	private String scope = SCOPE_DEFAULT;

	//是否是抽象,对应bean属性abstract 	默认不为抽象类
	private boolean abstractFlag = false;
	
	//是否延迟加载,对应bean属性lazy-init
	@Nullable
	private Boolean lazyInit;
	//	默认不进行自动装配
	private int autowireMode = AUTOWIRE_NO;
	//	默认不进行依赖检查
	private int dependencyCheck = DEPENDENCY_CHECK_NONE;

	//用来表示一个bean的实例化依靠另一个bean先实例化
	//这里只会存放<bean/>标签的depends-on属性或是@DependsOn注解的值
	@Nullable
	private String[] dependsOn;

	//autowire-candidate属性设置为false,这样容器在查找自动装配对象时,
  	//将不考虑该bean,即它不会被考虑作为其他bean自动装配的候选者,
    //但是该bean本身还是可以使用自动装配来注入其他bean的
	private boolean autowireCandidate = true;
	
	//自动装配时出现多个bean候选者时,将作为首选者,对应bean属性primary
	private boolean primary = false;

	//用于记录Qualifier,对应子元素qualifier
	private final Map<String, AutowireCandidateQualifier> qualifiers = new LinkedHashMap<>();

	@Nullable
	private Supplier<?> instanceSupplier;

	//允许访问非公开的构造器和方法,程序设置
	private boolean nonPublicAccessAllowed = true;

	//是否以一种宽松的模式解析构造函数,默认为true
	private boolean lenientConstructorResolution = true;
	
	//对应bean属性factory-bean 工厂类名
	@Nullable
	private String factoryBeanName;
	
	//对应bean属性factory-method 工厂方法名
	@Nullable
	private String factoryMethodName;
	
	//记录构造函数注入属性,对应bean属性constructor-arg
	@Nullable
	private ConstructorArgumentValues constructorArgumentValues;
	
	//普通属性集合
	@Nullable
	private MutablePropertyValues propertyValues;
	
	//方法重写的持有者,记录lookup-method、replaced-method元素
	private MethodOverrides methodOverrides = new MethodOverrides();
	
	//初始化方法,对应bean属性init-method
	@Nullable
	private String initMethodName;
	
	//销毁方法,对应bean属性destroy-method
	@Nullable
	private String destroyMethodName;

	//是否执行init-method,程序设置
	private boolean enforceInitMethod = true;

	//是否执行destroy-method,程序设置
	private boolean enforceDestroyMethod = true;
	//是否是用户定义的而不是应用程序本身定义的,创建AOP时候为true,程序设置
	private boolean synthetic = false;
	//定义这个bean的应用,APPLICATION:用户,INFRASTRUCTURE:完全内部使用,与用户无关
	private int role = BeanDefinition.ROLE_APPLICATION;
	
	//bean的描述信息
	@Nullable
	private String description;
	//bean的资源
	@Nullable
	private Resource resource;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值