Spring
什么是Spring?
Spring是分层的JavaSE及JavaEE应用于全栈的轻量级开源框架,以IOC(控制反转/反转控制)和AOP(面向切面编程)为核心,能整合开源世界中众多著名的第三方框架和类库,逐渐成为使用最多的JavaEE企业级应用开源框架。为开发Java应用程序提供全面的基础架构支持。
Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。
Spring的本质是管理软件中的对象,即创建对象和维护对象之间的关系。
Spring框架的核心
IOC容器和AOP模块。
通过IOC容器管理POJO对象以及他们之间的耦合关系,让相互协作的组件保持松散的耦合;
通过AOP以动态非侵入式的方式增强服务 ,允许把遍布于应用各层的功能分离出来形成可重用的功能组件。
Spring的优缺点是什么?
优点:
- 方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象的创建和以及关系的维护,交给Spring管理; - Aop编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。 - 声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动的编程。 - 方便程序的测试
Spring对Junit4支持 ,可以通过注解方便的测试Spring程序。 - 方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持 - 降低JavaEE API的使用难度
Spring对JavaEE开发中非常难用的一些API(JDBC,JavaMail,远程调用等),都提供了封装,使这些API应用难度大大降低。
缺点:
- Spring是一个很轻量级的框架,却给人感觉大而全
- Spring依赖反射,反射影响性能
- 使用门槛高,入门Spring需要较长时间
Spring有哪些模块组成
- spring core : 提供了框架的基本组成部分,包括控制反转和依赖注入功能。
- spring beans : 提供了bean工厂,是工厂模式的一个经典实现,Spring将管理对象称为bean
- spring context : 构建于core封装包基础上的context封装包,提供了一种框架式的对象访问方法
- spring jdbc : 提供了一个JDBC的抽象层,消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析,用于简化JDBC。
- spring aop : 提供了面向切面的编程实现,让你可以自己定义拦截器,切点等。
- spring web : 提供了正对web开发的继承特性
- spring test : 主要为测试提供支持的
Spring框架中都用到了那些设计模式
- 工厂模式: Bean工厂就是简单工厂模式的体现,用来创建对象的实例;
- 单例模式: Bean默认为单例模式
- 代理模式: Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
- 模板方法: 用来解决代码重复的问题
- 观察者模式
Spring应用程序有哪些不同组件
接口 Bean类 Bean配置文件 Spring面向切面编程 用户程序
Spring控制反转(IOC)
什么是Spring IOC 容器?
控制反转即IOC,它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。
Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象)并且管理这些对象的整个生命周期。
控制反转(IOC)有什么作用
- 管理对象的创建和依赖关系的维护。对象的创建并不是一件简单的事,在对象关系比较复杂时,如果以来关系需要程序员来维护的话,那是相当头疼的
- 解耦,由容器去维护具体的对象
- 托管了类的产生过程,比如我们需要在类的产生过程中做一些处理,最直接的例子就是代理,如果有容器程序可以把这部分处理交给容器,应用程序则无需关心类是如何完成代理的
Spring IOC的实现机制
Spring 中的IOC的实现原理就是工厂模式加反射机制
Spring的IOC支持哪些功能
- 依赖注入
- 依赖检查
- 自动装配
- 支持集合
- 指定初始化方式和销毁方式
- 支持回调某些方法
Spring的依赖注入
控制反转IOC 是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找
依赖注入:相对于IOC而言,依赖注入(DI)更加准确地描述了IOC的设计理念。所谓依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定,也就是容器动态的将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。
依赖注入的基本原则
应用组件不应该负责查找资源或者其他依赖的协作对象。
依赖注入有什么优势
让容器全权负责依赖查询,受管组件只需暴露JavaBean的setter方法或者暴露带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系。
有哪些不同类型的依赖注入实现方式
依赖注入分为接口注入,Setter方法注入和构造器注入三种方式。
构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖
Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。
构造器注入和Setter方法注入的区别
构造函数注入: 没有部分注入 不会覆盖setter属性 任意修改都会创建一个新实例 适用于设置很多属性
setter注入 : 有部分注入 会覆盖setter属性 任意修改都不会创建一个新实例 适用于设置少量属性
两种依赖方式都可以使用,构造器注入和Setter方法注入。最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖
Spring支持的事务管理类型,spring事务实现方式有哪些?
Spring支持两种类型的事务管理:
编程式事务管理:难维护
声明式事务管理
Spring面向切面编程(AOP)
什么是AOP?
AOP面向切面编程,是一种设计思想,他是面向对象编程的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。
Spring Aop里面的几个名词
- 切面:切面是通知和切点的结合。
- 连接点:是在应用执行过程中能够插入切面的一个点
- 通知
- 切入点:匹配通知所要织入的一个或多个连接点。