Spring的概念、IoC容器详解

12 篇文章 0 订阅

Spring是什么?

Spring是JavaEE编程领域的一款轻量级的开源框架。
可以从狭义和广义的两个角度来介绍它。

狭义上:

Spring 指 Spring FrameWork , 通常称它为 Spring框架。
它有两个核心部分:IoC 和 AOP

IoC: Inverse of Control (控制反转),是面向对象编程的一种设计原则,可以用来减少计算机代码之间的耦合度。
它是一个生产和管理bean的容器。原来需要调用类中new的东西,现在都是通过容器生成。同时,要是产生的是单例的bean,它还可以管理bean的生命周期。
在Spring应用中,java对象的创建权是掌握在IoC容器里的,大致步骤如下:
(1)开发人员通过 xml配置文件 / 注解 / java配置类等方式对java对象进行定义。比如在xml配置文件中使用标签,或者在java类上使用@Component 来定义对象。
2.Spring 启动时,IoC会自动根据对象定义,将这些对象创建并管理起来。这些被IoC容器创建并管理的对象被称为Spring Bean.
3.当我们想要使用某个Bean时,可以直接从IoC容器中获取(例如通过 ApplicationContext的getBean()方法 ),而不需要我们手动通过代码(例如:new Object())创建。
什么是控制反转?
控制反转的意思是:原本调用者是主动的一方,它用什么资源就会主动出击,自己创建。但是在Spring应用中,变成IoC容器负责创建,调用者称为了被动方,要等待IoC容器创建它所需要的对象(Bean),然后它才能调用。所有这个对象控制权从调用者手中转到IoC容器中就成了控制反转。

AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将他们独立到非直到指导业务逻辑的方法中,进而可以改变这些行为的时候不影响到业务逻辑。

广义上:

广义上的Spring指的是以 Spring Framework 为核心的Spring技术栈。
例如: Spring Framework,Spring MVC, Spring Boot, Spring Cloud ,Spring Data , Spring Security等,其中Spring Framework是其他子项目的基础。

Spring Data : Spring 提供的数据访问模块,对 JDBC 和 ORM 提供了很好的支持。通过它,开发人员可以使用一种相对统一的方式,来访问位于不同类型数据库中的数据。
Spring Batch : 一款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发人员方便的开发出健壮、高效的批处理应用程序。
Spring Security : 前身为 Acegi,是 Spring 中较成熟的子模块之一。它是一款可以定制化的身份验证和访问控制框架。
Spring Mobile : 是对 Spring MVC 的扩展,用来简化移动端 Web 应用的开发。
Spring Boot 是 Spring 团队提供的全新框架,它为 Spring 以及第三方库一些开箱即用的配置,可以简化 Spring 应用的搭建及开发过程。
Spring Cloud : 一款基于 Spring Boot 实现的微服务框架。它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。

在开发中,通常采用三层体系架构,分别为表现层(controller)、业务层(service)、持久层(dao).
Spring 致力于Java EE 应用各层的解决方案,对每一层都提供了技术支持。
(1)在表现层提供了Spring MVC、Struts2等框架的整合。
(2)在业务逻辑层提供了管理事务和记录日志的功能
(3)在持久层提供了MyBatis,Hibernate和JdbcTemplate等技术,对数据库进行访问。

Spring Framework的特点:

(1)方便解耦,简便开发
可以将所有对象的创建和依赖关系的维护交给Spring管理
(2)方便集成各种优秀框架
(3)降低 JavaEE API的使用难度
Spring对JavaEE中一些比较难用的API(JDBC,JavaMail,远程调用等)都提供了封装,使这些API难度降低。
(4)方便程序的测试
支持Junit4,可以通过注解方便的测试Spring程序。
(5)AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截和运行监控等功能。
(6)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。

SpringIoC

依赖注入(DI):

在面向对象中,对象和对象之间是存在一种叫做"依赖"的关系。简单来说,就是在一个对象中需要用到另外一个对象,即对象中存在一个属性,该属性是另一个类的对象。
控制反转核心思想就是由Spring负责对象的创建。在对象创建过程中,Spring会自动根据依赖关系,将它依赖的对象注入到当前对象中,这就是“依赖注入”。

IoC工作原理:

我们先了解一个词 :“耦合”,那么什么是耦合呢?
耦合是指两个实体相互依赖于对方的一个度量。
在软件开发过程中,过高的耦合度和过低的耦合度,都会存在一定的问题。
耦合度过高会造成难以维护,所有我们在程序设计中,一般是在不影响系统功能的前提下,最大限度的降低耦合度。
IoC底层通过工厂模式、Java反射机制,XML解析等技术,将代码的耦合度降低到最低。
使用xml配置时:
第一步,我们会在xml配置文件中,对各个对象以及它们之间的依赖关系进行配置。我们可以把IoC容器当成一个工厂,Bean就是它的产品。
第二步,我们在启动容器时会加载并解析这些配置关系,得到对象的基本信息和他们之间的依赖关系。IoC会利用Java反射机制根据类名生成相应的对象(Bean),并根据依赖关系将这个对象注入到它的对象中。
由于对象的基本信息,对象之间的依赖关系都是在配置文件中定义的,并没有在代码中紧密耦合,因此,即使对象发生变化,我们也只需要在配置文件中进行修改即可,无须对java代码进行修改,这就是Spring IoC解耦的原理。

IoC容器的两种实现:

IoC容器底层其实就是一个Bean工厂。Spring为我们提供了两种不同类型的IoC容器,分别是BeanFactory和ApplicationContext.

1. BeanFactory

是IoC容器的基本实现,也是Spring提供的最简单的IoC容器,它提供了IoC容器最基本的功能。
它采用的是懒加载机制,容器在加载配置文件时不会立刻创建java对象,只要程序中使用这个对象时才会被创建。
(懒加载:就是延迟加载,只有在使用到时才加载资源;预加载:提前加载,提前把要使用的资源全都加载好)
BeanFactory的使用:

BeanFactory context= new ClassPathXmlApplicationContext("bean.xml");
UserDao userDao= (UserDao) context.getBean("userDao");

注意:它是Spring内部接口,通常不提供给开发人员使用。

2.ApplicationContext

它是BeanFactory接口的子接口,是对BeanFactory的扩展。
ApplicationContext在BeanFactory的基础上增加了许多企业级的功能,例如AOP(面向切面编程)、国际化、事务支持等。
ApplicationContext有两个实现类:
(1)ClassPathXmlApplicationContext
加载类路径ClassPath下指定的xml配置文件,并完成ApplicationContext的实例化工作

 ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");

(2)FileSystemXmlAllicationContext
加载指定的文件系统路径中指定的xml配置文件,并完成ApplicationContext的实例化工作。

  ApplicationContext app=new FileSystemXmlApplicationContext("D:\\workspace\\Spring\\itheima_spring_ioc\\src\\main\\resources\\applicationContext.xml");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的轻量级应用框架,其核心思想是IoC(Inversion of Control)和AOP(Aspect Oriented Programming),其中: 1. IoC(控制反转):指将对象的创建和依赖关系的管理交给Spring容器来完成,即由容器来控制对象的生命周期和依赖关系。通过IoC容器,我们可以将对象之间的依赖关系从代码中分离出来,使得代码更加简洁、灵活、易于维护和扩展。 2. AOP(面向切面编程):指通过在程序中定义切面(Aspect)来实现对横切关注点(Cross-cutting Concerns)的管理。切面可以定义一些通用的行为,如日志记录、性能统计、安全控制等,然后将其应用到多个不同的对象中,从而实现代码的重用和统一管理。 除此之外,Spring还有一些其他的核心概念,如: 1. Bean:在Spring中,所有的对象都被称为Bean,Bean是Spring IoC容器中的基本构建模块,它由容器创建、组装和管理。 2. ApplicationContext:是SpringIoC容器的接口,它负责管理Bean的生命周期和依赖关系,并提供了一些高级功能,如事件传播、国际化、资源管理等。 3. Spring MVC:是Spring框架中的Web应用程序开发框架,它基于MVC(Model-View-Controller)架构模式,提供了一组组件和工具,使得开发Web应用程序更加容易和灵活。 总之,Spring的核心概念包括IoC、AOP、Bean、ApplicationContext和Spring MVC等,这些概念Spring框架提供了强大的功能和灵活性,使得开发者可以更加方便地开发出高质量的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值