-
public interface ObjectFactory {
-
T getObject();
-
}
-
public class DependencyDemo {
-
// 初始化完毕的Bean
-
private final Map<String, Object> singletonObjects =
-
new ConcurrentHashMap<>(256);
-
// 正在初始化的Bean对应的工厂,此时对象已经被实例化
-
private final Map<String, ObjectFactory<?>> singletonFactories =
-
new HashMap<>(16);
-
// 存放正在初始化的Bean,对象还没有被实例化之前就放进来了
-
private final Set singletonsCurrentlyInCreation =
-
Collections.newSetFromMap(new ConcurrentHashMap<>(16));
-
public T getBean(Class beanClass) throws Exception {
-
// 类名为Bean的名字
-
String beanName = beanClass.getSimpleName();
-
// 已经初始化好了,或者正在初始化
-
Object initObj = getSingleton(beanName, true);
-
if (initObj != null) {
-
return (T) initObj;
-
}
-
// bean正在被初始化
-
singletonsCurrentlyInCreation.add(beanName);
-
// 实例化bean
-
Object object = beanClass.getDeclaredConstructor().newInstance();
-
singletonFactories.put(beanName, () -> {
-
return object;
-
});
-
// 开始初始化bean,即填充属性
-
Field[] fields = object.getClass().getDeclaredFields();
-
for (Field field : fields) {
-
field.setAccessible(true);
-
// 获取需要注入字段的class
-
Class<?> fieldClass = field.g
09-09
8639
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)