java类spring加载_spring的加载机制?

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容器也比较简单~"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java计数器策略模式_java设计模式(二十一)--策略模式

对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用。 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略接口 策略实现类 策略作用类(使用策略的类) 网络上的专业解释:此模式…

java负数十进制转二进制_java中负数的补码转换为十进制

C++全局和静态变量初始化转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的 ...eclips常用快捷键本文取自:Eclipse中常用快捷键 - yizhang88的专栏 - 博客频道 - CSD…

linux setuid函数_setuid函数解析

在讨论这个setuid函数之前,我们首先要了解的一个东西就是内核为每个进程维护的三个UID值。这三个UID分别是实际用户ID(real uid)、有效用户ID(effective uid)、保存的设置用户ID(saved set-user-ID)。首先说这个实际用户ID,就是我们当前以哪个用户登录了…

java中asl_带你认识绕不开的ASLR

微软从windows vista/windows server 2008(kernel version 6.0)开始采用ASLR技术,主要目的是为了防止缓冲区溢出ASLR技术会使PE文件每次加载到内存的起始地址随机变化,并且进程的栈和堆的起始地址也会随机改变。ASLR(Address space layout randomization…

java复杂性_java – 计算Big-O复杂性

我最终会给这个程序一个类似60,000个400像素图像的输入文件,所以我试着想一想这个代码如何用大输入运行.为了便于阅读,我用“blah”和所有带有简单字母(nn,mm和kk)的ArrayList名称替换了不重要的东西.for (Perceptron P : nn){//blah}for (Perceptron P : mm) {//blah}for (Per…

java泛型与接口_Java泛型用于方法,类和接口

什么是泛型?型就是数据类型参数化。就是说原本定死的数据类型像方法中的形参一样,数据是不确定的,使用的时候由人传进去,泛型就是这样,数据类型不确定了。使用的时候再确定就可以了。泛型的特点是JDK1.5的新特性泛型可…

unix系统编码 java_JAVA字符编码系列三:Java应用中的编码问题

这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考。为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问题,特别是乱码问题&#xff…

Java 捕获 mybatis异常_3 springboot集成mybatis和全局异常捕获

mybatis有两种方式,一种是基于XML,一种是基于注解springboot集成mybatis首先先创建表,这里都简化了DROP TABLE IF EXISTS user;CREATE TABLE user (id int(11) NOT NULL auto_increment,username varchar(255) default NULL,PRIMARY KEY (id)…

java背景图片加上组件_关于 java swing组件加背景图片的问题

最近自己做了一个小的进销存软件,背景图片加上后不能最大化。尝试了好几种方法 最后终于把问题解决了。下面把自己写的实例 分享一下:一个是在JFrame窗体中加如背景图片一个是在Jpanel 面板中加入背景图片都可以伸缩铺满整个屏幕,算是自己的一个小心得。…

java applet 访问文件_使用JavaApplet访问数据库

使用Java Applet访问数据库学习任何的程序语言,当然都得与数据库,Java刚刚诞生的时候,对数据库的支持并不是很好,经过这几年的发展,它对数据库的支持也已经完全达到了成熟的境地。由于这里主要是介绍Java Applet小程序…

java ip 范围内打卡_定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内

具体代码如下所述:/* 计算两组经纬度坐标之间的距离* param $lat1 纬度1* param $lng1 经度1* param $lat2 纬度2* param $lng2 经度2* param int $len_type 返回值类型(1-m 2-km)* param int $decimal 保留小数位数* return float*/public function getDistance($l…

与java线程有关的,线程多少和什么有关?大神们表示有话要说!

原标题:线程多少和什么有关?大神们表示有话要说!来源:importnew.com/10780.htmlEddie的回答:Charlie Martin的回答:benjismith的回答:Neil Coffey的回答:McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个…

php正则表达式 匹配数字,正则表达式之匹配数字范围

最近有个需求就是根据产品编号批量下架产品,需要下架日期为16-31号之间的产品,比如编号为B201607280023匹配表达式如下:^201607(1[6-9]|2[0-9]|3[0-1]).逻辑很简单,如果是必须是1或2或3开头,如果是1开头则后面范围为6-9&#xff0…

php中带?错误,参考-此错误在PHP中意味着什么?

这是什么?这是有关警告,错误和注意事项的许多答案,这些警告,错误和注意事项在您对PHP进行编程时可能会遇到,并且不知道如何解决它们。这也是一个社区Wiki,因此邀请所有人参与添加并维护此列表。为什么是这样…

yiilite.php,YII Framework学习教程-YII的V-view的render若干函数-2011-11-17 | 学步园

YII中,在action可以通过$this->render来指定它的view。其实还其他一$this->render开头的函数。yiilite.php中有这么几个函数。public function renderText($text,$returnfalse){if(($layoutFile$this->getLayoutFile($this->layout))!false)$text$this-…

php生成链接列表,根据URL链接和抛文本生成链接a标签的PHP函数

这个函数可以为组成一个链接,第一个参数是链接的URL,第二个参数是抛文本。最后生成抛文本function parseurl($url, $text) {if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\…

java 项目 人力资源项目,基于jsp的人力资源系统-JavaEE实现人力资源系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的人力资源系统, 该项目可用各类java课程设计大作业中, 人力资源系统的系统架构分为前后台两部分, 最终实现在线上进行人力资源系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类人力资源系统相关的实体…

php阿拉伯语字符串,按字母顺序命名阿拉伯语名称Mysql和php

我试图用阿拉伯语对 alphabetical order 中的结果进行排序,但出于某种原因 not sorting correctly ..$ d1 mysqli_query($ connector,“SELECT * FROM article where type 1ORDER BY name ASC”); while($ a1 mysqli_fetch_array($ d1)){echo“$ a1 [n…

matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数

Matlab中的inline函数1.有时为了描述某个数学函数的方便,可以用inline()函数来直接编写该函数,形式相当于M-函数,但无编写一个真正的MATLAB文件,就可以描述出某种数学关系。其调用格式为funinline(‘函数内容’,自变量…

matlab最佳拟合的指标是什么意思,Matlab拟合好坏常用指标

Matlab拟合好坏常用指标用过Matlab的拟合、优化和统计等工具箱的网友,会经常遇到下面几个名词:SSE(和方差、误差平方和):The sum of squares due to errorMSE(均方差、方差):Mean squared errorRMSE(均方根、标准差):R…