Spring 框架深入了解

一、Spring框架基础知识

Spring的优势

1.方便解耦,简化开发:通过spring的ioc容器,将对象间的依赖关系交由Spring进⾏控制,避免硬编码所造成的

过度程序耦合,⽤户也不必再为单例模式类、属性⽂件解析等这些很底层的需求编写代码,可以更专注于上层的应⽤。

2. AOP编程的⽀持: 通过Spring的AOP功能,⽅便进⾏⾯向切⾯的编程,许多不容易⽤传统OOP实现的功能可以通过

AOP轻松应付。

3.声明式事务的支持:@Transactional 可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式⽅式灵活的进⾏事务的管理,提⾼开发效率和质量。

4.方便程序的测试

5.方便集成各种框架

6.降低Javaee api的使用难度

Spring的核心结构

数据处理模块、web模块、aop模块、core container模块、test模块

1. Spring核⼼容器(Core Container) 容器是Spring框架最核⼼的部分,它管理着Spring应⽤中

bean的创建、配置和管理。在该模块中,包括了Spring bean⼯⼚,它为Spring提供了DI的功能。

基于bean⼯⼚,我们还会发现有多种Spring应⽤上下⽂的实现。所有的Spring模块都构建于核⼼容器之上。

2. ⾯向切⾯编程(AOP)/Aspects Spring对⾯向切⾯编程提供了丰富的⽀持。这个模块是Spring应⽤系统中开发切⾯的基础,与DI⼀样,AOP可以帮助应⽤对象解耦。

3. 数据访问与集成(Data Access/Integration)

Spring的JDBC和DAO模块封装了⼤量样板代码,这样可以使得数据库代码变得简洁,也可以更专注于我们的业务,还可以避免数据库资源释放失败⽽引起的问题。 另外,Spring AOP为数据访问提供了事务管理服务,同时Spring还对ORM进⾏了集成,如Hibernate、MyBatis等。该模块由JDBC、Transactions、ORM、OXM 和 JMS 等模块组成。

4. Web 该模块提供了SpringMVC框架给Web应⽤,还提供了多种构建和其它应⽤交互的远程调⽤⽅案。 SpringMVC框架在Web层提升了应⽤的松耦合⽔平。

5. Test 为了使得开发者能够很⽅便的进⾏测试,Spring提供了测试模块以致⼒于Spring应⽤的测试。 通过该模块,Spring为使⽤Servlet、JNDI等编写单元测试提供了⼀系列的mock对象实现。

什么是IOC

控制反转/反转控制:控制指的是对象的创建、管理、实例化权利,反转指的是控制权交给了外部容器Spring框架。Ioc容器

具体实现:我们不⽤⾃⼰去new对象了,⽽是由IoC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使⽤哪个对象,去问IoC容器要即可,而传统开发需要通过new对象来获取,依赖性强,通过IOC解决了对象之前的耦合问题。

IOC和DI的区别

DI其实就是依赖注入,和IOC描述的都是对象实例化和依赖关系维护这件事情,但是角度不同,IOC站在对象的角度,对象实例化及其管理的权利交给了(反转)容器,ID是站在容器的角度,容器会把对象依赖的其他对象注入,比如A对象在实例化过程中声明了一个B类型的属性,就要容器把B对象注入A。

什么是AOP

Aop是oop的延续,传统oop三大特性封装、继承、多态,成一种垂直继承体系,存在顶级分类代码重复无法优化问题,无法解决横向切面逻辑代码问题,所以就产生了aop,通过横向抽取机制,将横切逻辑代码和业务逻辑代码分析。在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复

为什么叫横向界面编程

「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以⾯向横切逻辑

「⾯」:横切逻辑代码往往要影响的是很多个⽅法,每⼀个⽅法都如同⼀个点,多个点构成⾯,有⼀个⾯的概念在⾥⾯

二、IOC容器设计实现及Spring源码分析

Spring框架的IOC实现三种方式

1. 纯xml方式

2. Xml加注解方式

上面两种方式加载相同:JavaEE应用通过new ClassPathXmlApplicationContext(“beas.xml”)或者new FileSystemXmlApplicationContext(“c:beans.xml”)加载;JavaWeb应用通过ContextLoaderListener(监听器去加载xml)

3. 纯注解方式

加载方式:JavaEE应用通过new AnnotationConfigApplicationContext(SpringConfig.class); JavaWeb应用通过ContextLoaderListener(监听器去加载注解配置类)

BeanFactory与ApplicationCentext区别

BeanFactory是Spring框架IOC容器顶层接口,定义了基础功能和规范,而ApplicationContect是他的子接口,不仅具备了他的所有功能,并且还对他进行扩展,支持了更多的功能,实现面向接口开发原则。

Spring IoC纯XML方式实现

Xml文件头

理解:通过引入Spring IoC容器功能,实现不需要再创建一个专门的BeanFactory来解析xml文件并返回,直接通过WebApplicationContextUtils.getWebApplicationContext就能获取到Spring工具类,再通过getBean方法获取到对应解析的全限定名转化成需要的类对象

Bean的创建方式及属性标签

实例化Bean的三种方式

1. 使用无参构造 推荐

<bean id="connectionUtils" class="com.lagou.edu.utils.ConnectionUtils"></bean>

2. 使用静态方法创建 需要自己去new

<bean id="connectionUtils" class="com.lagou.edu.factory.CreateBeanFactory" factory-method="getInstanceStatic"/>

3. 使用实例化方法创建 需要自己去new

<bean id="createBeanFactory" class="com.lagou.edu.factory.CreateBeanFactory"></bean>

<bean id="connectionUtils" factory-bean="createBeanFactory" factory-method="getInstance"/>

Scope:定义bean的作用范围

1. singleton:单例,IOC容器中只有一个该类对象,默认为singleton,单例模式的bean对象⽣命周期与容器相同。

2. prototype:原型(多例),每次使用该类的对象(getBean),都返回给你一个新的对象,Spring只创建对象,不管理对象

id属性: ⽤于给bean提供⼀个唯⼀标识。在⼀个标签内部,标识必须唯⼀。

class属性:⽤于指定创建Bean对象的全限定类名。

name属性:⽤于给bean提供⼀个或多个名称。多个名称⽤空格分隔。

factory-bean属性:⽤于指定创建当前bean对象的⼯⼚bean的唯⼀标识。当指定了此属性之后,class属性失效。

factory-method属性:⽤于指定创建当前bean对象的⼯⼚⽅法,如配合factory-bean属性使⽤,则class属性失效。如配合class属性使⽤,则⽅法必须是static的。

scope属性:⽤于指定bean对象的作⽤范围。通常情况下就是singleton。当要⽤到多例模式时,可以配置为prototype。

init-method属性:⽤于指定bean对象的初始化⽅法,此⽅法会在bean对象装配后调⽤。必须是⼀个⽆参⽅法。

destory-method属性:⽤于指定bean对象的销毁⽅法,此⽅法会在bean对象销毁前执⾏。它只能为scope是singleton时起作⽤。

Spring DI依赖注入配置

依赖注入分类:构造函数注入和set方法注入

注入类型:基本类型和String、其他Bean类型、复杂类型(map,list等等)

构造函数注入:constructor-arg标签

依靠构造函数对类成员进行赋值,而且构造函数参数要与配置参数个数相同、类型相同

name:⽤于给构造函数中指定名称的参数赋值。

index:⽤于给构造函数中指定索引位置的参数赋值。

value:⽤于指定基本类型或者String类型的数据。

ref:⽤于指定其他Bean类型的数据。写的是其他bean的唯⼀标识。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值