面试——Spring+SpringMVC

1、Spring是什么,都有那些模块?

Spring是一个开源框架,它帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。

Spring框架至今已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。

IOC就是控制反转,我们把创建对象的权利交给框架,当我们需要使用的时候通过依赖注入给我们;

AOP就是面向切面编程,它的主要思想是将横向重复代码纵向抽取出来,Spring通过JDK动态代理(必须实现同一接口,优先)和cglib代理来实现AOP(只要能继承就行)。

  • 各个步骤之间的良好隔离性耦合性大大降低 

  • 源代码无关性,再扩展功能的同时不对源码进行修改操作 

2、Spring常见创建对象的注解?

@Component@Controller@ Service@ Repository 

3、Spring中用到的设计模式

答:简单工厂、工厂方法、单例模式、适配器、包装器、代理、观察者、策略、模板方法

4、Spring的优点?

  • 1.降低了组件之间的耦合性,实现了软件各层之间的解耦(IOC,对象是通过反射创建的)
  • 2.可以使用提供的众多服务,如事务管理,消息服务等
  • 3.容器提供单例模式支持 (好处:节省系统资源)
  • 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 
  • 5.容器提供了众多的辅助类,能加快应用的开发 
  • 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 
  • 7.spring属于低侵入式设计,代码的污染极低 
  • 8.独立于各种应用服务器 
  • 9.spring的DI机制降低了业务对象替换的复杂性 
  • 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring 的部分或全部 

5、Spring Bean的作用域之间有什么区别?

Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:

singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。 

request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。 

Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。

全局作用域与Servlet中的session作用域效果相同。

6、Spring管理事务有几种方式?

答:有两种方式:

1、编程式事务,在代码中硬编码。(不推荐使用)

2、声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种: 

  • a、基于XML的声明式事务
  • b、基于注解的声明式事务

7、spring中自动装配的方式有哪些?

答:1、 No:即不启用自动装配。 

2、 byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。

3、 byType:通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。

4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造器注入。

5、 autodetect:在byType和constructor之间自动的选择注入方式。

6、 default:由上级标签<beans>的default-autowire属性确定。

8、spring中的核心类有那些,各有什么作用?

答:BeanFactory:产生一个新的实例,可以实现单例模式

BeanWrapper:提供统一的get及set方法

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能 

9、Bean的调用方式有哪些?

答:有三种方式可以得到Bean并进行调用: 

3、使用ApplicationContext(根据配置文件创建Spring容器,然后获取bean) 

ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”); 

HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”); 

System.out.println(hw.getMsg()); 

10、什么是IOC,什么又是DI,他们有什么区别?

答:依赖注入DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个 数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外 部以减少依赖

应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所 以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

11、spring有两种代理方式:

答: 若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。

      优点:因为有接口,所以使系统更加松耦合

      缺点:为每一个目标类创建接口

若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

      优点:因为代理类与目标类是继承关系,所以不需要有接口的存在。

      缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。

12、springMVC的流程(请求生命周期)?

  • 1、 用户发送请求至前端控制器DispatcherServlet
  • 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  • 3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  • 4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  • 5、 执行处理器(Controller,也叫后端控制器)。
  • 6、 Controller执行完成返回ModelAndView
  • 7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  • 8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  • 9、 ViewReslover解析后返回具体View
  • 10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
  • 11、 DispatcherServlet响应用户

13、Springmvc的优点

1.它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成.

2.不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)

3.可以任意使用各种视图技术,而不仅仅局限于JSP

4.支持各种请求资源的映射策略

5.它应是易于扩展的

猜你喜欢

转载自www.cnblogs.com/x54256/p/8908432.html