接近Spring实现一个IOC框架之Bean定义

为什么需要Bean定义

我们知道Spring框架的核心是它内部的Bean工厂(在设计模式上来说也称之为IOC容器), 当我们要使用某一个在工厂托管的Bean时,工厂会帮助我们去生成,注入依赖,初始化等一系列行为,最后返回一个符合我们期望的Bean,那工厂怎么知道他要生成什么,注入哪些依赖,初始化什么呢,这就需要我们先有一个Bean定义告诉工厂我们需要怎样的Bean,其他的慢慢来也不急。

抽象的Bean定义

我们试想一下,所有的Bean是不是有一些通用的属性可以抽象出来呢?简单想想,最先想到的有是否单例,属性集合,其他一些先等等不急。那首先我们得把属性定义下吧。

属性

属性一般由属性名称和属性值构成,属性值也需要通用,那就先声明为Object类型吧,简单点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class PropertyValue {

//属性名称
private String name;

//属性值
private Object value;

public PropertyValue(String name, Object value) {
this.name = name;
this.value = value;
}

public String getName() {
return name;
}

public Object getValue() {
return value;
}
}

接下来那需要有一个集合来把Bean的所有属性集合在一起了,集合起来有啥好处呢?可以根据名称方便 获取的获取到对应的属性啊!我们知道Java中List,Set都是接口,那这边我们索性也做成集合接口吧,取名为PropertyValues:

1
2
3
4
5
6
7
8
public interface PropertyValues {

PropertyValue[] getPropertyValues();

boolean contains(String propertyName);

PropertyValue getPropertyValue(String propertyName);
}

手续齐全了,到这里我们就可以定义一个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
public class AbstractBeanDefinition {

//bean是否单例
private boolean singleton;

//bean的属性集合
private PropertyValues pvs;

public AbstractBeanDefinition(boolean singleton, PropertyValues pvs) {
this.singleton = singleton;
this.pvs = pvs;
}
public AbstractBeanDefinition() {
this.singleton=true;
}
public final boolean isSingleton(){
return singleton;
}

public void setPvs(PropertyValues pvs) {
this.pvs = pvs;
}

public PropertyValues getPvs() {
return pvs;
}
}

简单吧,我们把一个工厂需要的最简单的Bean定义给整出来了。接下来我们还得添加点什么呢?请看下篇。

欢迎关注我的公众号:沉迷Spring
显示 Gitment 评论
0%