【Spring】Spring相关知识点总结

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为中心进行的。

clipboard.png

你怎样定义类的做用域?

当定义一个<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()方法。

clipboard.png

哪些是重要的bean生命周期方法? 你能重载它们吗?

有两个重要的bean 生命周期方法,第一个是setup , 
它是在容器加载bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。
The bean 标签有两个重要的属性(init-method和destroy-method)。
用它们你能够本身定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)
相关文章
相关标签/搜索