-
什么是Spring?
答:spring的核心是一个轻量级的容器(Container),包含并管理应用程序对象的配置及生命周期。
它是实现IoC(Inversion of Control)容器和非侵入性(No intrusive)的框架,
并提供AOP(Aspect-oriented Programming)的实现方式,提供对持久层(Persistence)、事务(Transcation)的支持;
提供MVC Web框架的实现,并对一些常用的企业服务API提供了一致的模型封装,是一个全方位的应用程序框架,除此之外,对现存的各种框架(Struts、JSF、hibernate、Ibatis、Webwork等),Spring也提供了与他们相整合的方案。
注:IOC(Inversion Of Control )控制反转;将对象的创建和依赖关系交给容器;简单说就是创建对象由以前的程序员自己new构造方法来调用,变成了交由Spring创建对象。
-
Spring核心功能?
-
IoC介绍和优点?
IoC(Inversion Of Control )控制反转;将对象的创建和依赖关系交给容器;简单说就是创建对象由以前的自己new构造方法来调用,变成了交由Spring创建对象。
Spring IoC负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理这些对象的生命周期。
IOC的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。
-
AOP介绍和优点?如何实现?
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
-
jdk代理和cglib代理的区别?
JDK动态代理和CGLIB字节码生成的区别?
* JDK动态代理只能对实现了接口的类生成代理,而不能针对类。(接口代理)
* CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。(类代理)
Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
如何强制使用CGLIB实现AOP?
(1)添加CGLIB库,SPRING_HOME/cglib/*.jar
(2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>
JDK代理是不需要以来第三方的库,只要要JDK环境就可以进行代理,它有几个要求
* 实现InvocationHandler
* 使用Proxy.newProxyInstance产生代理对象
* 被代理的对象必须要实现接口
-
Spring的实例保存在哪?
-
Spring MVC工作流程
1)首先用户向服务器发送请求,被DS捕获;(用户->DS 请求)
2)DS收到请求,调用HandlerMapping(处理器映射器)获得Handler相关对象(处理器)(包括Handler及HandlerInterceptor),以HanderExecutionChain对象的形式返回; (DS->HM HM->DS H/HI/HEC)
3)DS根据获得的Handler找到合适的HandlerAdapter(处理器适配器),调用具体的Controller,Controller执行结果ModelAndView返回给DS; (DS->HA Controller; HA->DS MAV)
4)DS将MAV传给ViewReslover(视图解析器),VR解析后返回View,DS根据Model和View渲染视图,渲染结果返回客户端; (DS->VR MAV; VR->DS View; DS->客户端 Model View)
-
MyBatis的#和$的区别?