您的位置:首页 > 编程语言 > Java开发

Spring 源码解析之BeanDefinition接口

2020-06-12 06:42 393 查看

BeanDefinition 用来管理JavaBean和JavaBean之间的依赖关系,Spring将JavaBean中的数据结构转化成BeanDefinition中的数据结构进行维护,继承了AttributeAccessor(用来附加和访问元数据的接口)和BeanMetadataElement(获取配置)两个接口

public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
//表示单例模式作用域的标识符  值为singleton
String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;

//表示原型模式作用域的标识符  值为prototype
String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;

/**定义的bean 设置了三种角色
*1. Application  主要角色,应用程序默认定义的
*2. Support       应用程序定义的比较大的对象,被认为足够重要的,足以引起注意
*3. Infarstructure   Spring内容定义的,只在bean容器后台内部工作,与用户无关
**/

int ROLE_APPLICATION = 0;
int ROLE_SUPPORT = 1;
int ROLE_INFRASTRUCTURE = 2;

//获得Bean容器定义的父定义的名称
String getParentName();

// 如果有父定义的话,在bean容器定义的名称上写入父定义的名称,
void setParentName(String parentName);

//返回bean定义的当前类名
//不一定是运行使用的实际类名,也可能是子类重写或继承其父类的名称
//不是运行的bean的最终类型,只是对单个bean定义级别上的解析
String getBeanClassName();

//重写bean定义的bean类名
//将原始类名替换成修改解析后的类名
void setBeanClassName(String beanClassName);

//如果有FactoryBean的话,就返回FactoryBean的名称
String getFactoryBeanName();

//指定使用的FactoryBean,如果有的话
void setFactoryBeanName(String factoryBeanName);

//返回 一个工厂方法,如果有的话
String getFactoryMethodName();

//指定工厂的方法,这个方法将通过构造函数参数,如果没有指定任何参数,就不带参数,在指定的FactoryBean上被调用,如果有的话,或者相当于一个本地Bean类里面的一个静态方法, 参数是静态的FactoryBean 名称,如果为null应该使用普通的构造函数创建例如getBeanClassName()
void setFactoryMethodName(String factoryMethodName);

//返回bean当前的目标作用域名称,如果还不知道就为null
String getScope();

//重写这个bean的目标作用域,指定一个新的作用域名称
void setScope(String scope);

//是否延迟初始化改bean
//启动时候快速初始化,仅适用单例中
boolean isLazyInit();

//设置是否该延迟初始化这个bean,如果参数为false,则启动时就被初始化执行单例初始化的工厂
void setLazyInit(boolean lazyInit);

//返回该bean所依赖的bean的名称
String[] getDependsOn();

//设置该bean所依赖的bean的名称,bean工厂将保证这些bean第一时间被初始化
void setDependsOn(String... dependsOn);

//判断该bean是否自动连接到其他bean
boolean isAutowireCandidate();

//设置该bean是否连接到其他bean
void setAutowireCandidate(boolean autowireCandidate);

//返回该bean是否是一个主要的被认为适合的连接对象
//如果返回true,对于多个连接对象,他将破坏这个连接平衡的局面
boolean isPrimary();

//设置该bean是否是一个被认为适合的连接对象
void setPrimary(boolean primary);

//返回该bean的构造函数值,返回的实例可以在工厂后处理期修改,返回的值不为null
ConstructorArgumentValues getConstructorArgumentValues();

//返回应用于bean新实例的属性值,返回的实例可以在工厂后处理期修改,返回的值不为null
MutablePropertyValues getPropertyValues();

//返回是否是单例共享实例,所有呼叫都返回
boolean isSingleton();

//返回是否是原型独立实例,所有呼叫都返回
boolean isPrototype();

//bean是否是抽象的,不要实例化
boolean isAbstract();

//获取角色  Application ,Support,Infrastructure三种
int getRole();

//返回bean定义的可读描述
String getDescription();

//返回bean定义的配置描述,出现错误显示上下文
String getResourceDescription();

//返回原始的BeanDefinition,没有就为null
//允许检索修饰bean的定义
//此方法直接返回发起者,遍历所有用于定义的原始的BeanDefinition
BeanDefinition getOriginatingBeanDefinition();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: