手写框架探险系列-ioc框架的完善

之前自己做的ioc

  • 源码地址
  • 之前总体方向是正确的,只是具体的实现有些问题。职责有些混乱。
  • 不足,好多没有考虑到:
    • 当ioc容器冲突的时候怎么处理,之前通过返回null来处理,代码侵入性太强。现在采用等级解决。
    • 自己利用map再次管理bean的作用域,资源浪费且越级。现在完全交给ioc管理
    • creatBean的方法有问题,之前是缓存反射工厂的method来处理的,资源浪费和越级。现在完全交给ioc管理
  • 现在只需要专注于实现一个类就行了。
  • 且已经整合了spring的ioc了,具体整合实现很简单。请看源码地址。

利用org.apache.commons.configuration2.beanutils.BeanHelper再次重构

  • 所有的步骤都是在重复造轮子,其实都是BeanHelper的实现。
  • 核心api
public void registerBeanFactory(String name, BeanFactory factory)
public Object createBean(BeanDeclaration data, Class<?> defaultClass,  Object param)
public Object createBean(BeanDeclaration data, Class<?> defaultClass)
public Object createBean(BeanDeclaration data)

可以看到用户需要传入的就是BeanDeclaration

    String getBeanFactoryName();  //那个factory实例化

    Object getBeanFactoryParameter(); // 

    String getBeanClassName(); 

    Map<String, Object> getBeanProperties();  // 普通的属性

    Map<String, Object> getNestedBeanDeclarations();  // 嵌套的属性,这是不是ioc

    Collection<ConstructorArg> getConstructorArgs();   // 构造方法。
  • 可能有些api比较危险我们代理一下就行了。
  • apache默认的BeanDeclaration构造是无构造方法有属性,所有的工厂就是默认的工厂。
  • 这里的难点就是BeanDeclaration的构造和确定工厂。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容