硬刚Spring

来源:互联网 发布:气味集香水 知乎 编辑:程序博客网 时间:2024/04/28 03:00

面试官:谈谈你对Spring的理解。
maeeki:首先先从Spring起源说起,为什么会出现Spring这种技术呢? 一方面,因为随着Java流行,Java相关框架也越来越多,但是一个框架出现的时候通常不会过多的考虑与另一个框架之间的契合度,因此当多个框架结合开发时会变得复杂;另一方面,传统的开发方式中,普遍是用到什么对象时直接采用硬编码的方式new一个该对象,使得程序之间的耦合度较高,不利于进行后期的测试维护及功能的修改扩展。还有,对于原生的jdbc这些Java API,用户想要进行使用的时候若是不借助Hibernate,Mybatis这些框架开发起来会比较的繁琐,每次都得写很多冗余的代码。Spring的出现为上述的问题提供了很好的解决方面,首先,利用它可以很好的整合诸如Hibernate、Struts2、Mybatis、redis、dubbo等等一系列各种各样的框架及技术,让用户只需简单的配置就能使用这些技术,真正的让程序员将注意力都集中在了代码的开发上。然后,Spring遵从了依赖反转(IOC)的设计原则,采用依赖注入(DI)的具体方式对程序代码进一步解耦,真正做到了面向接口开发,而不是面向实现类开发的模式,让得程序后期的测试与维护也变得很轻松,例如现在Spring中内置的mockito测试框架就是依赖于这种特性而实现测试的。最后,Spring框架中对jdbc,javamail等一系列的API都进行了薄薄的封装,让用户可以更便利的使用它。接下来,再谈下Spring 的基本组成部分,Spring主要是由测试框架、bean工厂、AOP,数据库相关、web相关部分组成。其中bean工厂为Spring的核心,这里是Spring生成对象的地方。AOP也是Spring的一大特色,可以在不修改源码的情况下对程序进行增强。数据模块中主要含有jdbc,ORM,OXM,JMS,事务等部分。web模块主要就是springmvc了。额,这部分若是细讲的话我也说不精确,就略过。。。然后谈下我对Spring的两大主要特性的理解吧,其一就是IOC,IOC到底是什么呢?其实IOC就是一个设计原则而已,IOC的实现方式主要有两种,一是DI,即依赖注入,二是DL,即依赖选择,用的较多的就是依赖注入,那么IOC名叫控制反转,到底是什么反转了呢?怎么做到的反转呢?IOC的反转个人理解是控制权的反转,或者成为对象引用获取的反转,传统开发,获取对象引用都是new一个,但是Spring却是接管了对象的创建,对象生产的控制权从用户的手中交到了Spring的手里。那么Spring是怎么做到提供所需对象引用的呢?这便是采用了依赖注入的方式了,在该对象被创建时,若其依赖有其他对象,那么通过Spring内部的“调度器”将该对象的引用传递给它,即依赖注入。接下来再说下对AOP的理解,AOP总结下来其实就一句话:此山是我开,此树是我摘,若想从此过,留下买路财。其中,从道路上过的人都是不同的,每个人都有他们的任务,这些人都相当于一个程序,整条道路就相当于传统程序的运行路线,那么AOP就相当与强盗,堵住了道路,用Java的行话来说就是站成一个切面,每个程序过来的时候都要遵从强盗的规则,做一些既定的操作,如男的交钱,女的留下当压寨夫人~。最后说下整合Spring的基本配置,以及为什么要这样配置,因为要在服务器启动后初始化Spring容器,而服务器启动后会先为该应用创建一个ServletContext,因此整合第一步就是在web.xml中配置ServletContext的监听器,监听类为ContextLoaderListener,若未明确指定applicationContext.xml的具体地址,那么默认去WEB-INF文件夹下去找,若没找到,则报错。加载后就会根据配置的Bean的作用域来确定创建对象的时机。Bean的作用域通常有两种,singleton与prototype,默认为singleton,应用一加载就创建一个单例的对象。prototype为多例,在与Struts2整合后实例化动作类时使用,每次请求传递到动作类时都会新创建一个动作类对象以保证线程的安全性。

0 0
原创粉丝点击