1,今天面试官问我spring的加载机制有哪些---这么"抽象"的问题作为一个十多年经验的自己写过MVC,IOC,ORM, 等各种中间件小框架的开发人员也回答不出来~

确切的说是无从谈起,不知道从哪个角度说这个事情,在我的观点里这个问题本身的问法就有问题,什么叫"加载机制",spring加载的是什么????

我很好奇在问别人"spring的加载机制有哪些"的时候意图想知道spring是如何被启动的,还是spring是如何"加载"他管理的组件的;这个问题本身就有很大的歧义~

(我第一反应是后者,如果你是问前者,然后告诉我通过什么new XmlApplicationContext("app.xml")或者WebApplicationContext...这种是你的正确答案,我就会觉得你很LOW~

哈哈,当然后者其实也是一个很LOW的面试问题~).

WEB容器"加载"Spring这种说法其实是不合适的~Spring本身并没有纳入web容器的管理~

用"加载"这个词来描述Spring"启动"之后对"被管理组件"的初始化和管理也是非常可笑的说法~

所以其实你可以忽略这个面试官给你的影响的,很多面试官本身自个儿水平就不咋样,网上找一些有所谓正确答案的题目...很多时候他们其实自己都不知道自己在干什么问什么~

2,Spring最核心的东西是什么?尽管现在的spring看起来那么庞杂似乎保罗万象,但他最核心的东西是容器~

什么是容器?上面有人说容器就是个Map,这句话对也不对,

因为容器不仅仅是存放组件,它最主要的功能是"管理组件的生命周期和依赖".

对象的创建(包括初始化),销毁....当你从容器中get一个组件的时候,该组件所依赖的组件也必须相应的被初始化(当然也有可能是lazy的,只在真正用到的时候);

组件A依赖B和C,C依赖D,D依赖B.....我要得到组件A就需要相应的一层层的初始化其他组件,其他组件之间可能存在相互依赖这种情况,这种层层依赖的管理如果人工管理就会非常麻烦~容器能帮助你管理组件,让这种依赖看起来"扁平"一些~

这是容器核心要解决的问题~

至于其他IOC外围的功能比如MVC,AOP,集成其他第三方组件,都是次要的~从这一层面而言,Spring容器更像一个粘合剂~各个组件之间的连接和集成的桥梁~

3,有人提到了WEB容器(Tomcat),那就说说WEB容器;

如果你看过tomcat的代码你就发现,Tomcat本身就是一个容器~他管理着他自身组件的生命周期,你可以看一下tomcat conf目录下的 "server.xml",他是一个层次结构的包括Server,Connector,Engine,Context Listener 和我们直接关系的Servlet....

他的作用和spring的applicationContext.xml本质上是一样的~

Tomcat读取这个XML然后初始化这些组件,跟Spring读取XML初始化管理自己组件的本质其实是一样的;

这其实存在一个问题:他们是两个容器,对彼此容器内的东西没有控制权,这两个容器是不兼容的~ @廖雪峰 已经说了Tomcat根本不知道你是否使用了Spring,

Tomcat根据自己的XMLs(包括web.xml)管理自己的组件比如Servlet;Spring根据自己的applicationContext.xml(s)管理自己的组件~

好些年前我遇到过一个问题:

public class LoginServlet extends HttpServlet

{

private static final long serialVersionUID = 1L;

//这里有没有办法直接从Spring容器中获得UserService的实现呢? @Autowired

UserService userService;

有没有办法对Servlet的属性直接做依赖注入呢?大家思考一下?~

另外一个问题:

有没有办法让Spring来管理我们的Servlet,使得上面的UserService可以注入呢?

注意:我这里说的是容器定义的Servlet~不是什么你自己定义的Action或者Controller;

4,另外我觉得其实没有必要"非得"研究JVM或者GC,我是说没有必要为了面试去研究他们,如果你感兴趣,时间允许,没有任何问题~

否则就会像你说的:看了->用不到->忘了~

至于非得学什么新的框架~我觉得也没必要吧;

在我看来学会"使用"一个框架是很简单的事情,但学精任何框架都是很困难的事情~

多看看你现在会的框架,看看他们的代码知道为什么要那么干,知道他们功能的边界,什么事情不能干的,有没有更好的实现办法~多知道一些本质性的东西,我觉得可能会更好一些~

另外有时间关注一下新的技术,知道他们是什么能干吗就没问题了;

我觉得自己是一个需求驱动型的~遇到问题有思路就行了~

5,还有,有人说自己实现一个Spring也是非常简单的事儿~

按照这个逻辑我是不是也可以说造个核反应堆也是一个很简单事儿?

我只能说你考虑的太少了,很多事情原理很简单,但实际上你要遇到的问题远比你想象的多~

稍微严谨一点的表述是"自己写一个类似Spring的玩具IOC容器也比较简单~"

java类spring加载_spring的加载机制?相关推荐

  1. Java 类在 Tomcat 中是如何加载的?

    说到本篇的Tomcat类加载机制,不得不说翻译学习Tomcat的初衷. 之前实习的时候学习JavaMelody的源码,但是它是一个Maven的项目,与我们自己的Web项目整合后无法直接断点调试. 后来 ...

  2. 多项目加载顺序修改_面试官:Java 类在 Tomcat 中是如何加载的?

    说到本篇的Tomcat类加载机制,不得不说翻译学习Tomcat的初衷. 之前实习的时候学习JavaMelody的源码,但是它是一个Maven的项目,与我们自己的Web项目整合后无法直接断点调试. 后来 ...

  3. java中spring的注解_spring中的各种注解解析

    Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...

  4. Java安全(一) : java类 | 反射

    给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! 关注公众号:b1gpig信息安全,文章推送不错过 1.java基础 Java平台共分为三个主要版本Java SE(Java Platform, S ...

  5. spring 加载java类_在Spring中基于Java类进行配置的完整步骤

    在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...

  6. java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...

    java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式 发布时间:2018-08-20 12:02, 浏览次数:774 , 标签: java spri ...

  7. java 和 spring加载顺序问题

    问题1:加载顺序问题: conf.properites配置如下: fetchJobsSchedule=0 25 0 * * ? updateJobsSchedule=0 12 17 * * ? jav ...

  8. 初识jvm-1.Java类的加载机制

    转载: jvm系列---纯洁的微笑 地址: http://www.ityouknow.com/jvm.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其 ...

  9. Java深度历险(二)——Java类的加载、链接和初始化

    在上一篇文章中介绍了Java字节代码的操纵,其中提到了利用Java类加载器来加载修改过后的字节代码并在JVM上执行.本文接着上一篇的话题,讨论Java类的加载.链接和初始化.Java字节代码的表现形式 ...

最新文章

  1. Jupyter Magic - Timing(%%time %time %timeit)
  2. HTML5适应旧的浏览器的使用总结
  3. iis php根目录可以访问子目录不行,wordpress在IIS下伪静态后子目录无法访问的解决方法...
  4. 【STM32 .Net MF开发板学习-11】步进电机控制(非PWM模式)
  5. 计算机网络·数据链路层.三个基本问题
  6. Windows x64内核学习笔记(一)—— 环境与配置
  7. nacos如何搭建集群?nacos+nginx搭建集群,这一篇文章就够了!
  8. 机器学习速成课程 | 练习 | Google Development——编程练习:稀疏数据和嵌套简介
  9. Javascript中document.execCommand()的用法
  10. mysql中explain的详细解释
  11. 程序猿生存定律--表达背后的力量(1)
  12. 双击获取GridView控件行信息
  13. 2021-09-07NVIDIA Jetson Xavier NX载板 RTSO-6002使用TF(MicroSD)卡说明
  14. 【Excel中阶技巧】表结构、函数、数据验证、导入导出、透视表、Power Pivot、其他技巧
  15. 表设计原则_表格设计原则
  16. 浅墨博客《游戏编程模式》
  17. mysql 1677_【MySQL】Error Code:1677处理过程小记
  18. matlab中根据信号和信噪比添加高斯白噪声(函数直接使用)
  19. VA 570嵌入式流量计0695 0570_A1_B1_C1_D1_E1_F1_G1_H1_I1_J1_K1_L1_M1_R1流量计
  20. (附源码)springboot萌宠宠物网店的开发与设计 毕业设计 011042

热门文章

  1. 任务不再等待!玩转DataWorks资源组
  2. 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  3. Apache旗下顶级开源盛会 HBasecon Asia 2018将于8月在京举行
  4. CSS 状态管理,玩出花样了!
  5. AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜
  6. 拯救运维工程师,数据链 DNA 来袭!
  7. 蓝色巨人IBM全力奔赴的混合云之旅能顺利吗?
  8. 云原生安全模型与实践
  9. 一文带你了解混淆矩阵!
  10. BAT 力捧的 AI 项目再次爆发,这些程序员都受影响!