怎样实现依赖注入功能之笔记

前端之家收集整理的这篇文章主要介绍了怎样实现依赖注入功能之笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对类的实例化,不是开发者自己通过new的方式来实例化,而是通过框架自身来实例化,这过程称为IoC。控制不是由开发者来决定的,而是反转给框架了。一般地,我们也将控制反转称为DI(Dependency Injection,依赖注入)。那如何实现呢?

最简单的方式是,先通过BeanHelper获取所有Bean Map(是一个Map<Class<?>,Object> 结构,纪录了类与对象的映射关系,
分别取出Bean类与Bean实例 ,进而通过反射获取类中所有的成员变量。继续遍历这些成员变量,在循环中判断当前成员变量是否带有Inject注解,若带有该注解,则从Bean Map中根据Bean类取出Bean实例。最后通过ReflectionUtil#setField方法修改当前成员变量的值。

核心实现:

Map<Class<?>,Object> beanMap = BeanHelper.getBeanMap();
    if (CollectionUtil.isNotEmpty(beanMap)) {
        for (Map.Entry<Class<?>,Object> beanEntry : beanMap.entrySet()) {
            Class<?> beanClass = beanEntry.getKey();
            Object beanInstance = beanEntry.getValue();
            Field[] beanFields = beanClass.getDeclaredFields();
            if (ArrayUtil.isNotEmpty(beanFields)) {
                for (Field beanField : beanFields) {
                    if (beanField.isAnnotationPresent(Inject.class)) {
                        Class<?> beanFieldClass = beanField.getType();
                        Object beanFieldInstance = beanMap.get(beanFieldClass);
                        if (beanFieldInstance != null) {
                            ReflectionUtil.setField(beanInstance,beanField,beanFieldInstance);
                        }
                    }
                }
            }
        }
    }

更多架构底层实现代码请移步

https://github.com/edagarli/own_framework

原文链接:https://www.f2er.com/javaschema/284190.html

猜你在找的设计模式相关文章