Bean容器
前面在ClassHelper定义了方法getBeanClasses()来获取Bean容器需要管理的所有Controller,Service类,获取这些类以后,调用BeanFactory.newInstance(Class<?> clazz)方法来实例化类的对象,缓存在Map
BeanContainer初始化:首先调用ClassHelper.getBeanClasses()获取所有的Bean类,调用Bean工厂方法newInstance()方法来实例化Bean类,保存在beanContainer中。通过类全名称从beanContainer获取需要的Bean实例对象。
/**
* Bean容器
*/
public class BeanContainer {
/**
* 存放Bean类名称和Bean实例的映射关系
*/
private static final Map<String, Object> beanContainer = new HashMap<>();
static {
ArrayList<Class<?>> beanClasses = ClassHelper.getBeanClasses();
for (Class<?> beanClass : beanClasses) {
Object obj = BeanFactory.newInstance(beanClass);
beanContainer.put(beanClass.getName(), obj);
}
}
/**
* 获取Bean映射
*
* @return
*/
public static Map<String, Object> getBeanContainer() {
return beanContainer;
}
/**
* 获取Bean实例
*/
public static <T> T getBean(String className) {
if (!beanContainer.containsKey(className)) {
throw new RuntimeException("can not get bean by className: " + className);
}
return (T) beanContainer.get(className);
}
/**
* 设置Bean实例
*/
public static void setBean(String className, Object obj) {
//补全代码
}
}
在com.hubwiz.web.bean.BeanContainer类里,实现方法将Bean实例存储在Bean容器。