关于Spring和SpringMVC的总结
1、Spring中AOP的应用场景、AOP原理、好处?
答:AOP:Aspect Oriented Programming面向切面编程;用来封装横切关注点,具体可以在下面场景中使用:
Authentication权限、Caching缓存、Contextpassing内容传递、Error handing错误处理、Lazy loading懒加载、Debugging调试、logging、tracing、profiling and monitoring记录跟踪优化校准、Persistence持久化、Resource pooling资源池、Synchronization同步、Transactions事务原理;
原理:AOP是面向切面编程,是通过动态代理的方式为程序添加统一功能,集中解决一些公共问题。
优点:1、各个步骤之间的良好隔离性耦合性大大降低;
2、源代码无关性,再扩展功能的同时不对源码进行修改操作。
2、Spring中IOC的作用与原理?对象创建的过程。
答:IOC:Inversion Of Control控制反转。
当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例对象。
但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者直接使用。
3、介绍Spring框架
答:它是一个一站式(full-stack全栈式)框架,提供了从表现层-springMVC到业务层-spring再到持久层-springdata的一套完整的解决方案。我们在项目于中可以只使用spring一个框架,它就可以提供表现层的mvc框架,持久层的Dao框架。它的两大核心IOC和AOP更是为我们程序解耦和代码简洁易维护提供了支持。
4、Spring常见创建对象的注解?
答:@Component、@Controller、@Service、@Repository
5、Spring中用到的设计模式?
答:简单工厂、工厂方法、单例模式、适配器、包装器、代理、观察者、策略、模板方法。
6、Spring的优点?
答:1、降低了组件之间的耦合性,实现了软件各层之间的解耦;
2、可以使用容易提供的众多服务,如事务管理,消息服务等;
3、容器提供单例模式支持;
4、容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能;
5、容器提供了众多的辅助类,能加快应用的开发;
6、spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7、spring属于低侵入式设计,代码的污染极低;
8、独立于各种应用服务器;
9、spring的DI机制降低了业务对象替换的复杂性;
10、spring的高度开放性,并不强制应用完全依赖于spring,开发者可以自由选择spring的部分或全部
7、Spring Bean的作用域之间有什么区别?
答:spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:
1、singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例模式由bean factory自身来维护;
2、prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例;
3、request:在请求bean范围与单例范围相反,为每一个bean请求提供一个实例;
4、session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效;
5、global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。
全局作用域与Servlet中session作用域效果相同。
8、Spring管理事务有几种方式?
答:有两种方式:
1、编程式事务,在代码中硬编码。(不推荐使用)
2、声明式事务,在配置文件中配置(推荐使用)
声明式事务又分为两种:
a、基于XML声明式事务;
b、基于注解的声明式事务。
9、Spring中自动装配的方式有哪些?
答:1、No:即不启用自动装配;
2、byName:通过属性名字的方式查找JavaBean依赖的对象并为其注入。
比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IOC容器会在配置文件中查找id/name属性为printer的bean,然后使用Setter方法为其注入。
3、byType:通过属性类型查找JavaBean依赖的对象并为其注入。
比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IOC容器会查找Class属性为Printer的bean,使用Setter方法为其注入。
4、constructor:与byType一样,也是通过类型查找依赖对象。
与byType的区别在于它不是使用Setter方法注入,而是使用构造器注入。
5、autodetect:在byType和constructor之间自动的选择注入方式。
6、default:由上级标签<beans>的default-autowire属性确定。
10、Spring中的核心类有哪些,各有什么作用?
答:1、BeanFactory:产生一个新的实例,可以实现单例模式;
2、BeanWrapper:提供统一的get及set方法;
3、ApplicationContext:提供框架的实现,包括BeanFactory的所有功能。
11、Bean的调用方式有哪些?
答:有三种方式可以得到Bean并进行调用:
1、使用BeanWrapper
HelloWorld hw = new HelloWorld() ;
BeanWrapper bw = bew BeanWrapper(hw) ;
bw.setPropertyValue("msg" , "HelloWorld") ;
System.out.println(bw.getPropertyCalue("msg")) ;
2、使用BeanFactory
InputStream is = new FileInputStream("config.xml") ;
XmlBeanFatory fatory = new XmlBeanFatory(is) ;
HelloWorld hw = (HelloWorld)factory.getBean("HelloWorld") ;
System.out.println(hw.getMsg()) ;
3、使用ApplicationContext
ApplicationContext context= new FleSystemXmlApplicationContext("config.xml") ; HelloWorld hw = (HelloWorld)context.getBean("HelloWorld") ; System.out.println(hw.getMsg()) ;
12、什么是IOC,什么又是DI,他们有什么区别?
答:依赖注入DI是一个程序设计模式和架构模型,一些时候也称作为控制反转,尽管在技术上来讲,依赖注入是IOC的一个特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,
例如:把一个数据库已连接的参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。
控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖注入到对象中。
所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
13、Spring有两种代理方式:
答:若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy代理。
优点:因为有接口,所以使系统更加松耦合;
缺点:为每一个目标类创建接口,若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
优点:因为代理类与目标类是继承关系,所以不需要有接口的存在;
缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。
14、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响应用户。
15、SpringMVC的优缺点?
答:优点:
1、它是基于组件技术的、全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件,并且和Spring提供的其他基础结构紧密集成;
2、不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的);
3、支持各种请求资源的映射策略;
4、它应是易于扩展的。
缺点:
1、Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行;
2、太过于细分,开发效率低;
3、过度追求完美,有过度设计的危险。
关于Spring和SpringMVC的总结的更多相关文章
- Spring和SpringMVC父子容器关系初窥
一.背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和 ...
- Spring以及SPringmvc相关问题: ServletContext -父子容器
总结如下: 明确了Servlet规范中ServletContext的作用和意义.此外明确一个Tomcat中多个web应用,每个人web应用有唯一的一个ServletContext(全局上下文).[例子 ...
- Spring+Mybatis+SpringMVC+Maven+MySql搭建实例
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何使用Maven来搭建Spring+Mybatis+SpringMVC+M ...
- Spring 和SpringMVC 的父子容器关系
Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配 ...
- SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- spring、springmvc、mybatis整合笔记
这段时间上一个项目刚做完,下一个项目还没开始,趁这个时候来认真总结一下上个项目使用的ssm开发框架.由于,项目中关于使用ssm这部分的代码和配置是我们项目的整体架构师一个独立完成的,我们只负责业务部分 ...
- Spring与SpringMVC的容器关系分析
Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配置S ...
- Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文实现了一个后台由Spring+Mybatis+SpringMVC组成,分页采用Pag ...
- logback与Spring、SpringMVC结合使用教程(转) logback good
摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <gro ...
- 走进spring之springmvc
走进spring之springmvc 在动手之前,我们需要了解下springnvc.这里先献上一张springmvc的流程图及讲解. Spring的MVC框架是一个基于DispatcherServle ...
随机推荐
- VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】
VSTO中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在ThisAddin.vb这个默认文件中. 大家可以在Visual Studio中创建 ...
- F5 BIG-IP之一前期随笔(应用交付网络产品)
ADN:应用交付网络 TMOS: Traffic managment operation system (流量管理系统) 一个实时的全应用代理流量管理操作系统 PVA ...
- Java 集合的迭代方式
集合的迭代流使得程序员得以站在更高的抽象层次上对集合进行操作.传统的迭代方法直接看代码: List<Dog> dogs = new ArrayList<>(); ...
- PXE自动部署工具
1.工具介绍1.1::本工具主要以图形界面的方式帮助使用者快速部署PXE安装Linux的基础环境环境,(如不需要可忽略相关操作)并且支持自动配置静态IP地址和为H3C设备划分VLAN. 1.2::对于 ...
- 蓝桥杯-PREV28-地宫取宝
先自己用dp解了一遍,然后看了官方讲解视频是用记忆化搜索做的.感觉那位老师的方法比较容易实现(效率上和我的差不多的):记录一下三种方法. 动态规划 地宫取宝 1.195KB C++ 正确 100 15 ...
- HDU-1251-统计难题(Trie树)(BST)(AVL)
字典树解法(Trie树) Accepted 1251 156MS 45400K 949 B C++ #include"iostream" #include"cstdlib ...
- [LC] 79. Word Search
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- [LC] 116. Populating Next Right Pointers in Each Node
You are given a perfect binary tree where all leaves are on the same level, and every parent has two ...
- insecticide|contradictions| at large|delay doing|
N-MASS 杀虫剂;杀虫药Insecticide is a chemical substance that is used to kill insects. Spray the plants wit ...
- revit卸载/完美解决安装失败/如何彻底卸载清除干净revit各种残留注册表和文件的方法
在卸载revit重装revit时发现安装失败,提示是已安装revit或安装失败.这是因为上一次卸载revit没有清理干净,系统会误认为已经安装revit了.有的同学是新装的系统也会出现revit安装失 ...