一、什么是Spring?
spring是一个以interface21为基础,经过重新设计的轻量级非入侵的控制反转(IOC)和面向切面的java开源框架,是为了解决企业级应用开发复杂性而创建的。
二、Spring的优点?
1、Spring是一个开源免费的框架 , 容器
2、Spring是一个轻量级的框架 , 非侵入式的 .
3、aop,使功能模块直接解耦,提高了代码复用率;
4、ioc,使用注入的方式替代了new创建对象来引用,减少代码,不用手动创建实例,而是交给
spring容器进行生成
5、提供了大量的pojo,替代xml,简化了配置;
6、封装jdbc,为database提供了dao模块,使开发更容器;
7、jdbc继承了各种数据源,兼容性更强;
8、集合了各种优秀的框架,为开发者提供了更多地选择和方便
三、Spring的组成?
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式 .
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
-
核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
-
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
-
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。
-
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
-
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
-
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
-
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
四、IOC
1、什么是IOC?
ioc:控制反转,将对象创建权交给spring内部,我们程序员只需要到spring容器里面去取,将对象得创建和使用解耦。IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。
2、什么是DI?
DI:就是我们所说的依赖注入,(依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 )ioc是一种思想理念,DI是它的具体实现。实质就是再程序运行时,依赖ioc容器,动态得从ioc容器中去获取我们所需要得对象,DI得实现得方式有三种,set方法注入,构造方法注入,接口注入
五、自动装配
自动装配是Spring框架的重要功能,是使用Spring满足bean依赖的一种方式,Spring会在应用中为某个bean寻找其依赖的bean,Spring中bean有三种装配机制,分别是:在xml中显示配置、在java中显示配置以及隐式的bean发现机制和自动装配。
Spring自动化装配可以借助@Autowired属性实现,以下是自动装配@Autowired属性的六个值的简要介绍:
1. byName
从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找标签的id属性值。如果有相同的,那么获取这个对象,实现关联。
整个Spring环境:表示所有的spring配置文件中查找,那么id不能有重复的。
2. byType
从Spring环境中获取目标对象时,目标对象中的属性会根据类型在整个spring环境中查找标签的class属性值。如果有相同的,那么获取这个对象,实现关联。
缺点:如果存在多个相同类型的bean对象,会出错。
如果属性为单一类型的数据,那么查找到多个关联对象会发生错误。
如果属性为数组或集合(泛型)类型,那么查找到多个关联对象不会发生异常。
3. constructor
使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。
4. autodetect
自动选择:如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter注入。
5. no
不支持自动装配功能。
6. default
表示默认采用上一级标签的自动装配的取值。如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。
自动装配是Spring框架的重要功能,能显著减少装配的数量,因此在配置数量相当多时采用自动装配,可以减少工作量,且自动装配可以使配置与Java代码同步更新,因此,在开发过程中建议采用自动装配,在系统稳定时可改为显性装配的方式。
六、使用注解的好处?
XML与注解比较
-
XML可以适用任何场景 ,结构清晰,维护方便
-
注解不是自己提供的类使用不了,开发简单方便
所以,最推荐:xml与注解整合开发
七、什么是AOP?
1、AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP还有几个基本概念,连接点,切点,增强(通知),织入,引介
连接点(JionPoint)
连接点,是程序执行的的某个位置,这些位置是具有边界性质的特定点,Spring支持方法的连接点
切点(PoionCut)
切点可以看作连接点的查询条件,一个切点可以匹配多个连接点,Spring AOP的规则引擎负责解析切点所设定的查询条件,找到对应的连接点
织入(Weaving)
将特定的方法,代码添加到目标连接点上的过程,织入有三种方式,编译期织入,装载期织入,和运行时织入;
Spring 通过***,实现了运行时织入
增强(Advice)
增强是织入到目标连接点的一段代码。Spring提供了许多增强接口,方便开发人员使用;Advice通常也翻译作通知,可以理解成在某个时间点通知程序做某件事情;而增强,可以理解成在原有的方法上添加了额外代码,达到增强原有方法的效果
引介
引介是一种特殊的增强,它为类添加一些属性和方法,这样可以使某些业务类实现某个接口,成为该接口的实现类
八、Spring声明式事务配置参考
事物配置中有哪些属性可以配置?以下只是简单的使用参考
- 事务的传播性:
@Transactional(propagation=Propagation.REQUIRED) - 事务的隔离级别:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
读取未提交数据(会出现脏读, 不可重复读) 基本不使用
- 只读:
@Transactional(readOnly=true)
该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。 - 事务的超时性:
@Transactional(timeout=30) - 回滚:
指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。