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

Spring框架源码解析 IOC容器实现BeanDefinition(三)

2018-01-07 16:18 411 查看
我们找女朋友,首先必须保证是个女的,这是最低要求,生活不易,我们先从最低的要求出发吧



。女朋友是一个抽象的概念,我们必须定义一些属性,年龄,身高,名字,是否漂亮等等来描述她。不过目前这些统统都没有,有的也就是说我们的最低要求,女的。

public interface BeanDefinition {
/**
* 设置女朋友的类型(必须是女的啊,不能是阿猫阿狗啊哈哈)
*/
void setBeanClassName(String beanClassName);

/**
* 获取女朋友的类型
*/
String getBeanClassName();

/**
* 设置女朋友的个数,一个或者多个
*/
void setScope(String scope);

/**
* 获得女朋友得个数
*/
String getScope();

/**
* 是否只有一个女朋友(可以说一个都木有吗?)
*/
boolean isSingleton();

/**
* 是否有多个女朋友(这种人应该枪毙的)
*/
boolean isPrototype();

/**
* 也许是个假的女朋友,充气娃娃吧
*/
boolean isAbstract();
}
  女朋友也分三六九等,AbstractBeanDefinition是女的活的,RootBeanDefinition,ChildBeanDefinition是一般条件的女生,GenericBeanDefinition就是白富美了 

  我们的要求低,先看看AbstractBeanDefinition 
public abstract class AbstractBeanDefinition implements BeanDefinition {

String SCOPE_SINGLETON = "singleton";

String SCOPE_PROTOTYPE = "prototype";

public static final String SCOPE_DEFAULT = "";

private volatile Object beanClass;

/**
* 默认是空,根据isSingleton()方法,可以判断是单例,咱们社会,还是一个女朋友比较合理
*/
private String scope = SCOPE_DEFAULT;

/**
* 默认是非抽象类,不敢想象一个抽象的女朋友有啥用
*/
private boolean abstractFlag = false;

/**
* 女朋友的信息
*/
private Resource resource;

protected AbstractBeanDefinition() {

}

protected AbstractBeanDefinition(BeanDefinition original) {
setBeanClassName(original.getBeanClassName());
setScope(original.getScope());
setAbstract(original.isAbstract());

}

@Override
public void setBeanClassName(String beanClassName) {
this.beanClass = beanClassName;
}

@Override
public String getBeanClassName() {
Object beanClassObject = this.beanClass;
if (beanClassObject instanceof Class) {
return ((Class<?>) beanClassObject).getName();
}
else {
return (String) beanClassObject;
}
}

public void setBeanClass(Class<?> beanClass) {
this.beanClass = beanClass;
}

public Class<?> getBeanClass() throws IllegalStateException {
Object beanClassObject = this.beanClass;
if (beanClassObject == null) {
throw new IllegalStateException("No bean class specified on bean definition");
}
if (!(beanClassObject instanceof Class)) {
throw new IllegalStateException(
"Bean class name [" + beanClassObject + "] has not been resolved into an actual Class");
}
return (Class<?>) beanClassObject;
}

public boolean hasBeanClass() {
return (this.beanClass instanceof Class);
}

@Override
public void setScope(String scope) {
this.scope = scope;
}

@Override
public String getScope() {
return this.scope;
}

@Override
public boolean isSingleton() {
return SCOPE_SINGLETON.equals(scope) || SCOPE_DEFAULT.equals(scope);
}

@Override
public boolean isPrototype() {
return SCOPE_PROTOTYPE.equals(scope);
}

public void setAbstract(boolean abstractFlag) {
this.abstractFlag = abstractFlag;
}

@Override
public boolean isAbstract() {
return this.abstractFlag;
}

}



看完AbstractBeanDefinition,有木有感觉非常简单,其实那是必须的,是男是女我们还是分的清的。但是女人心,海底针,想要完全了解一个女生,后面的章节你就会知道有多难了。

 


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