AbstractBeanDefinition
AbstractBeanDefinition实现了BeanDefinition接口,是最重要的Bean定义类。
AbstractBeanDefinition 常量属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
public static final String SCOPE_DEFAULT = "";
public static final int AUTOWIRE_NO = AutowireCapableBeanFactory.AUTOWIRE_NO;
public static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;
public static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;
public static final int AUTOWIRE_CONSTRUCTOR = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;
@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;
public static final String INFER_METHOD = "(inferred)";
|
AbstractBeanDefinition 属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
@Nullable private volatile Object beanClass;
@Nullable private String scope = SCOPE_DEFAULT;
private boolean abstractFlag = false;
private boolean lazyInit = false;
private int autowireMode = AUTOWIRE_NO;
private int dependencyCheck = DEPENDENCY_CHECK_NONE;
@Nullable private String[] dependsOn;
private boolean autowireCandidate = true;
private boolean primary = false;
private final Map<String, AutowireCandidateQualifier> qualifiers = new LinkedHashMap<>();
@Nullable private Supplier<?> instanceSupplier;
private boolean nonPublicAccessAllowed = true;
private boolean lenientConstructorResolution = true;
@Nullable private String factoryBeanName;
@Nullable private String factoryMethodName;
@Nullable private ConstructorArgumentValues constructorArgumentValues;
@Nullable private MutablePropertyValues propertyValues;
@Nullable private MethodOverrides methodOverrides;
@Nullable private String initMethodName;
@Nullable private String destroyMethodName;
private boolean enforceInitMethod = true;
private boolean enforceDestroyMethod = true;
private boolean synthetic = false;
private int role = BeanDefinition.ROLE_APPLICATION;
@Nullable private String description;
@Nullable private Resource resource;
|
实现类
ChildBeanDefinition
通用BeanDefinition 实现类,引入了 parentName属性
GenericBeanDefinition
通用BeanDefinition 实现类,引入了 parentName属性
AnnotatedGenericBeanDefinition
基于注解的BeanDefinition实现类,继承GenericBeanDefinition,引入了AnnotationMetadata metadata,MethodMetadata factoryMethodMetadata 两个属性;
ScannedGenericBeanDefinition
基于注解的BeanDefinition实现类,继承ScannedGenericBeanDefinition,引入了AnnotationMetadata metadata 属性;
RootBeanDefinition
ConfigurationClassBeanDefinition
继承RootBeanDefinition,为静态内部类,引入了AnnotationMetadata metadata,MethodMetadata factoryMethodMetadata 两个属性;
ClassDerivedBeanDefinition
继承RootBeanDefinition,为静态内部类
AbstractBeanDefinition属性信息可以分为一下几类
- Bean描述相关信息(否是抽象类、是否单例,Bean所属的类)
- Bean依赖信息(dependsOn)
- 自动装配的信息
- 生命周期相关信息(init、destroy,通过反射调用)
- 来源信息(工厂方法名、工厂类名,有可能通过工厂FactoryBean创建)
- 构造函数信息,Bean的属性以及对应的值(propertyValues,constructorArgumentValues)
- 被IOC容器覆盖的方法(methodOverrides,@Lookup 注解是基于此实现,器初始化的时候会通过cglib字节码库动态生成一个子类,并且会覆盖父类的实现)