从零构建轻量级Java Web框架 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

Bean容器

前面在ClassHelper定义了方法getBeanClasses()来获取Bean容器需要管理的所有Controller,Service类,获取这些类以后,调用BeanFactory.newInstance(Class<?> clazz)方法来实例化类的对象,缓存在Map beanContainer中,需要随时获取。Map说明:使用类全名称作为key,类的实例对象作为value值。

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容器。