Spring是什么前端
Spring是一个一站式轻量级的开源框架
Spring Bean的三种配置方式:xml、注解和Javaweb
@Configuration public class BeanConfig { @Bean public BeanFactory beanFactory(){ return new BeanFactoryImpl(); } }
Spring的核心:spring
控制反转(IoC)和面向切面(AOP)
AOP代理主要分为静态代理和动态代理数据库
AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的表明为AspectJ; 动态代理则以Spring AOP为表明。 (1)AspectJ是静态代理的加强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类 所以也称为编译时加强,他会在编译阶段将AspectJ(切面)织入到Java字节码中 运行的时候就是加强以后的AOP对象。 (2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码 而是每次运行时在内存中临时为方法生成一个AOP对象 这个AOP对象包含了目标对象的所有方法 而且在特定的切点作了加强处理,并回调原对象的方法。
Spring中AOP动态代理的两种实现方式:编程
JDK动态代理和CGLIB动态代理
Spring的优势:后端
Spring将对象之间的依赖关系交由框架处理,减低组件的耦合性; Spring对于主流的应用框架提供了很是方便的集成支持; Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能能够经过AOP轻松应付; Spring框架设计精妙,Spring源码是经典的学习范例
Spring的七大组成模块:安全
Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现
Spring事务的实现方式和实现原理:session
Spring事务的本质其实就是数据库对事务的支持 没有数据库的事务支持,spring是没法提供事务功能的。 真正的数据库层的事务提交和回滚是经过binlog或者redo log实现的。
Spring的IOC有三种注入方式 :app
构造器注入、setter方法注入、注解注入
Spring框架支持如下五种bean的做用域:框架
singleton : bean在每一个Spring ioc 容器中只有一个实例。 prototype:一个bean的定义能够有多个实例。 request:每次http请求都会建立一个bean,该做用域仅在基于web的Spring ApplicationContext情形下有效。 session:在一个HTTP Session中,一个bean定义对应一个实例。该做用域仅在基于web的Spring ApplicationContext情形下有效。 global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该做用域仅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的做用域是Singleton.
Spring支持两种类型的事务管理:
编程式事务管理:这意味你经过编程的方式管理事务,给你带来极大的灵活性,可是难维护。 声明式事务管理:这意味着你能够将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。
大多数Spring框架的用户选择声明式事务管理,由于它对应用代码的影响最小,所以更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式容许你经过代码控制事务)少了一点灵活性。
SpringMVC 请求处理流程
一、 用户发送请求被前端控制器DispatcherServlet捕获 二、 DispatcherServlet收到请求调用处理器映射器HandlerMapping。 三、 处理器映射器找到具体的处理器(能够根据xml配置、注解进行查找),生成映射信息 返回给DispatcherServlet。 四、 DispatcherServlet调用处理器适配器HandlerAdapter。 五、 处理器适配器根据映射信息适配调用具体的处理器(Controller,也叫后端控制器) Controller执行完成返回ModelAndView给DispatcherServlet。 六、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器 ViewReslover解析后返回具体视图view。 七、 DispatcherServlet根据视图View进行渲染视图而且响应给用户。
整个过程都是以DispatcherServlet为中心进行的。
你怎样定义类的做用域?
当定义一个<bean> 在Spring里,咱们还能给这个bean声明一个做用域。它能够经过bean 定义中的scope属性来定义。如,当Spring要在须要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。 另外一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope 属性 必须设为 singleton。
解释Spring支持的几种bean的做用域
Spring框架支持如下五种bean的做用域: singleton : bean在每一个Spring ioc 容器中只有一个实例。 prototype :一个bean的定义能够有多个实例。 request :每次http请求都会建立一个bean,该做用域仅在基于web的Spring ApplicationContext情形下有效。 session :在一个HTTP Session中,一个bean定义对应一个实例。该做用域仅在基于web的Spring ApplicationContext情形下有效。 global-session :在一个全局的HTTP Session中,一个bean定义对应一个实例。该做用域仅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的做用域是Singleton.
Spring框架中的单例bean是线程安全的吗?
不,Spring框架中的单例bean不是线程安全的。
解释Spring框架中bean的生命周期
PS:能够借鉴Servlet的生命周期,实例化、初始init、接收请求service、销毁destroy。 Spring的核心容器会首先从XML 文件中读取bean的定义,并实例化bean。 而后根据bean的定义填充全部的属性。 而后根据bean内部实现了哪些接口依次调用一堆方法,最后初始化,最后的最后destroy。 若是bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。 若是Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。 若是有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。 若是bean实现IntializingBean了,调用它的afterPropertySet方法, 若是bean声明了初始化方法,调用此初始化方法。 若是有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。 若是bean实现了 DisposableBean,它将调用destroy()方法。
哪些是重要的bean生命周期方法? 你能重载它们吗?
有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。 The bean 标签有两个重要的属性(init-method和destroy-method)。 用它们你能够本身定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)