• 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)


    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱。所以需要继续加强。

    这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说出来的东西才有意义。这种面试的问法,也只能是面试的问法,对实际的掌握还是没有丝毫意义的。所以我认为 有机会一定要读下spring的源码 来过一遍 具体实现,这样的才是有意义的做法。同意的请举手。

    这里说明一下这三个spring 面试问题:

    1、回客科技 面试的 实现ioc 容器用到的技术

      

    第1种 说法:

    参考自己实现简单Spring Ioc

    IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC。

    原理简单说明:
    其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外提供一个getBean()方法,以便我们获得这bean。

    第2种 说法:

    参考:https://blog.csdn.net/zhanghaor/article/details/73431021

    使用的主要知识点:    

    dom4j解析xml文件  

    xpath表达式(用于解析xml中的标签) 

    java反射机制   

    内省(获取Bean属性的set方法进行赋值)

    第3种 说法

    参考:Spring的IOC/DI使用到的技术

    IOC/DI使用到的技术

      1. JDOM:JDOM是对xml文件进行解析的技术,Spring的配置文件applicationContext.xml就是由JDOM进行解析的,它可以提取出xml文件中定义的标签和属性值。

      2. 反射机制:对配置文件中的类名使用反射机制可以实现类加载初始化等工作,也可以调用类的方法进行属性注入,java.lang.reflect提供了反射相关的工具

    2:简述BeanFactory的实现原理

    这里是cp的代码,为什么cp 是因为 这几句关键的东西需要我记住的。

    参考博客:简单实现Spring中BeanFactory原理

    先来看看Java代码获取Spring中Bean的代码(一共有五种方式,这里只展示其中一种方法):

    有没有发现上面的代码与利用反射实现工厂模式的代码很相似。对,你没有看错,Spring中的BeanFactory用到的就是简单工厂模式。

    现在的思路就更加清晰了,要想实现Spring中的BeanFactory,无非就用到了以下几个技术:

            1.使用简单工厂模式来处理bean容器。

            2.解析xml文件,获取配置中的元素信息。

            3.利用反射获实例化配置信息中的对象。

            4.如果有对象注入,使用invoke()方法。

            5.实例化的对象放入bean容器中,并提供getBean方法。

    通过以上步骤就实现了spring的BeanFactory功能,只要在配置文件中配置好,实例化对象的事情交给BeanFactory来实现,用户不需要通过new对象的方式实例化对象,直接调用getBean方法即获取对象实例。

    3、大搜车面试的 spring 怎么实现的依赖注入(DI)

    参考博客:http://blog.163.com/qqabc20082006@126/blog/static/2292852520091125112112902/

      在Spring容器中为一个bean配置依赖注入有三种方式:

    · 使用属性的setter方法注入  这是最常用的方式;

    · 使用构造器注入;

    · 使用Filed注入(用于注解方式).

     

    感谢 以上博客代码分享人,目前没有时间读源码,只能先记住了。面试还是需要应付一下的~~

  • 相关阅读:
    How do you Design a Circular FIFO Buffer (Queue) in C?

    搞懂分布式技术5:Zookeeper的配置与集群管理实战
    Spring boot 启动提示数据源错误
    IntelliJ IDEA 如何配置数据源
    Windows 10 中你可能用得最多的快捷键
    JUnit 5 测试问题 throws java.lang.Exception’ must be static unless the test class is annotated with @TestInstance(Lifecycle.PER_CLASS)
    Intellij IDEA 如何自动生成 serialVersionUID
    Docsify 初始化文件夹
    Docsify 安装
  • 原文地址:https://www.cnblogs.com/liran123/p/9393417.html
Copyright © 2020-2023  润新知