博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手写Spring mvc框架 (二)
阅读量:5368 次
发布时间:2019-06-15

本文共 1747 字,大约阅读时间需要 5 分钟。

五、控制反转(IOC)和依赖注入(DI)
  1. 概念

    • 控制反转:将创建对象的控制权反转给了spring

    • 依赖注入:spring在创建对象的过程中,动态地将依赖对象注入到Bean组件

  2. 实现

    工厂模式-BeanFactory

    从BeanFactory中获取对象,没有就创建,依赖没有就创建依赖,对象一般默认单例模式

    递归创建依赖会遇到循环依赖问题:

    • 如果需要的依赖正处于创建状态,则发生了循环依赖(可用ConcurrentHashMap缓存对象来判断)
    • 处理:将那个依赖的初始状态对象注入,即那个依赖对象里的成员变量为null

    BeanFactory简易实现代码:

    public class BeanFactory {    //一个类对应一个对象    private static Map
    , Object> classToBean = new ConcurrentHashMap<>(); public static Object getBean(Class
    cls) { return classToBean.get(cls); } public static void initBean(List
    > classList) throws Exception { List
    > toCreate = new ArrayList<>(classList); while (toCreate.size() != 0) { int remainSize = toCreate.size(); for (int i=0;i
    cls) throws IllegalAccessException, InstantiationException { if (!cls.isAnnotationPresent(Bean.class) && !cls.isAnnotationPresent(Controller.class)) { return true; } Object bean = cls.newInstance(); for (Field field : cls.getDeclaredFields()) { if (field.isAnnotationPresent(AutoWired.class)) { Class
    fieldType = field.getType(); Object reliantBean = BeanFactory.getBean(fieldType); if (reliantBean == null) { return false; } field.setAccessible(true); field.set(bean, reliantBean); } } classToBean.put(cls, bean); return true; }}
六、AOP

概念:弥补OOP的缺点,给每个函数前后留一个切面,可以实现业务代码和功能代码的分离

  • jdk代理

    被代理对象需要有个接口,jdk通过动态实现这个接口来实现代理

  • cgLib代理

    被代理对象没有接口怎么办?我们通过获取它的class字节码文件,创造一个继承它的子类,从而实现代理

转载于:https://www.cnblogs.com/lnu161403214/p/11070912.html

你可能感兴趣的文章
几种排序方法
查看>>
查看数据库各表的信息
查看>>
第一阶段测试题
查看>>
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>
ES6思维导图
查看>>
第四周作业
查看>>
20151121
查看>>
线段重叠 (思维好题)
查看>>
Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)
查看>>
SBuild 0.1.5 发布,基于 Scala 的构建系统
查看>>
WordPress 3.5 RC3 发布
查看>>
DOM扩展札记
查看>>
primitive assembly
查看>>
浅谈localStorage的用法
查看>>
Ad Exchange基本接口和功能
查看>>
Angular ui-router的常用配置参数详解
查看>>
软考知识点梳理--项目评估
查看>>
把特斯拉送上火星的程序员,马斯克!
查看>>