1.什么是spring?
Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。
2.说说你对Spring的理解
1、Spring是一个开源框架,主要是为简化企业级应用开发而生。可以实现EJB可以实现的功能,Spring是一个IOC和AOP容器框架。♧控制反转(IOC):Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。♧依赖注入(DI):Spring使用Java Bean对象的Set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。♧面向切面编程(AOP):在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
2、在Spring中,所有管理的都是JavaBean对象,而BeanFactory和ApplicationContext就是Spring框架的那个IOC容器,现在一般使用ApplicationContext,其不但包括了BeanFactory的作用,同时还进行了更多的扩展。
3.使用Spring框架的好处是什么?
1、轻量:Spring是轻量的,基本的版本大约2MB。
2、控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
3、面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
4、容器:Spring包含并管理应用中对象的生命周期和配置。
5、MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
6、事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
7、异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked异常。
4. Spring由哪些模块组成?
截止到目前Spring框架已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。
以下是Spring框架的基本模块:
Core module
Bean module
Context module
Expression Language moduleJDBC module
ORM module
OXM module
Java Messaging Service(JMS) moduleTransaction module
Web module
Web-Servlet module
Web-Struts module
Web-Portlet module
5. Spring框架使用了哪些设计模式
1、单例模式
2、原型模式
3、工厂模式
4、适配器模式
5、包装模式
6、代理模式
7、观察者模式
8、策略模式
9、模板模式
6. Spring支持的ORM
Spring支持以下ORM:Hibernate
iBatis
JPA (Java Persistence API)TopLink
JDO (Java Data Objects)OJB
7. Spring Framework有哪些不同的功能?
轻量级- Spring在代码量和透明度方面都很轻便。IOC -控制反转
AOP -面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚。容器- Spring负责创建和管理对象(Bean)的生命周期和配置。
MVC -对web应用提供了高度可配置性,其他框架的集成也十分方便。
事务管理-提供了用于事务管理的通用抽象层。Spring的事务支持也可用于容器较少的环境。JDBC异常- Spring的JDBC抽象层提供了一个异常层次结构,简化了错误处理策略。
8.什么是Spring的MVC框架?
Spring配备构建Web应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。
9.springmvc常用到的注解,作用是什么,原理。
@Controller注解
是在Spring的
org.springframework.stereotype包下,org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器
使用@Controller注解的类不需要继承特定的父类或者实现特定的接口,相对之前的版本实现Controller接口变的更加简单。
而Controller接口的实现类只能处理一个单一的请求动作,而@Controller注解注解的控制器可以同时支持处理多个请求动作,使程序开发变的更加灵活。@Controller用户标记一个类,使用它标记的类就是一个Spring MVC Controller对象,即:一个控制器类。Spring使用扫描机制查找应用程序中所有基于注解的控制器类,分发处理器会扫描使用了该注解的方法,并检测该方法是否使用了@RequestMapping注解,而使用@RequestMapping注解的方法才是真正处理请求的处理器。为了保证Spring能找到控制器,我们需要完成两件事:
@RequestParam注解
下面来说
org.springframework.web.bind.annotation包下的第三个注解,即:@RequestParam注解,该注解类型用于将指定的请求参数赋值给方法中的形参。那么@RequestParam注解有什么属性呢?它有4种属性,下面将逐一介绍这四种属性:
1、name属性该属性的类型是String类型,它可以指定请求头绑定的名称;
2、value属性该属性的类型是String类型,它可以设置是name属性的别名;
3、required属性该属性的类型是boolean类型,它可以设置指定参数是否必须绑定;
4、defalutValue属性该属性的类型是String类型,它可以设置如果没有传递参数可以使用默认值。
@PathVaribale注解
下面来说
org.springframework.web.bind.annotation包下的第四个注解,即:@PathVaribale注解,该注解类型可以非常方便的获得请求url中的动态参数。@PathVaribale注解只支持一个属性value,类型String,表示绑定的名称,如果省略则默认绑定同名参数。
10.在Spring中,有几种配置Bean的方式?
基于XML的配置
基于注解的配置
基于Java的配置
11.请解释一下Spring Bean的生命周期?
首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy;Spring上下文中的Bean生命周期也类似,如下:
1、实例化Bean:
对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。
2、设置对象属性(依赖注入):
实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息以及通过BeanWrapper提供的设置属性的接口完成依赖注入。
3、处理Aware接口:
接着,Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean:如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(StringbeanId)方法,此处传递的就是Spring配置文件中Bean的id值;
如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的是Spring工厂自身。
如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文;
4、BeanPostProcessor:
如果想对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用
postProcessBeforeInitialization(Object obj, String s)方法。由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;
5、InitializingBean与init-method:
如果Bean在Spring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法。
6、如果这个Bean实现了BeanPostProcessor接口,将会调用
postProcessAfterInitialization(Object obj, String s)方法;
以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。
7、DisposableBean:
当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;
8、destroy-method:
最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
12. BeanFactory和ApplicationContext有什么区别?
在类图关系上BeanFactory是ApplicationContext接口的父接口