Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean

Spring 框架来创建性能好、易于测试、可重用的代码。

Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。

Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应 用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

目录

Spring Framework

IOC容器

基于XML管理bean

基于注解管理bean


  1. Spring Framework

Spring 基础框架,可以视为 Spring 基础设施,基本上任何其他 Spring 项目都是以 Spring Framework 为基础的。

Spring Framework特性 非侵入式:使用 Spring Framework 开发应用程序时,Spring 对应用程序本身的结构影响非常 小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会 破坏原有结构,反而能将组件结构进一步简化。这就使得基于 Spring Framework 开发应用程序 时结构清晰、简洁优雅。

控制反转:IOC——Inversion of Control,翻转资源获取方向。把自己创建资源、向环境索取资源 变成环境将资源准备好,我们享受资源注入。

面向切面编程:AOP——Aspect Oriented Programming,在不修改源代码的基础上增强代码功 能。

容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化 的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发 效率。

组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XML 和 Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭 建超大型复杂应用系统。

声明式:很多以前需要编写代码才能实现的功能,现在只需要声明需求即可由框架代为实现。 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且 Spring 旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在 Spring Framework 的基 础上全部使用 Spring 来实现。

Spring Framework五大功能模块

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第1张图片

  1. IOC容器

IOC容器特点:可以管理对象的整个生命周期。(是一种设计思想)

IOC:Inversion of Control,翻译过来是反转控制。

反转控制方式获取资源

点外卖:下单、等、吃,省时省力,不必关心资源创建过程的所有细节。

反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主 动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源 的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。

(依赖哪个对象就可以对这个对象进行赋值)

③DI DI:Dependency Injection,翻译过来是依赖注入。(注入就是赋值的意思)

DI 是 IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器 的资源注入。相对于IOC而言,这种表述更直接。 所以结论是:IOC 就是一种反转控制的思想, 而 DI 是对 IOC 的一种具体实现。(对spring管理的对象的属性进行赋值)

IOC容器在Spring中的实现

Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做 bean。在创建 bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:

BeanFactory(是工厂设计模式,可以对创建当前对象过程进行隐藏,直接提高所需要的对象) 这是 IOC 容器的基本实现,是 Spring 内部使用的接口。面向 Spring 本身不提供给开发人员使用

②ApplicationContext

BeanFactory 的子接口,提供了更多高级特性。面向 Spring 的使用者,几乎所有场合都使用 ApplicationContext 而不是底层的 BeanFactory。

③ApplicationContext的主要实现类

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第2张图片 

基于XML管理bean

控制台报错,从下往上看

一个bean就是提供一个对象,spring提供的对象默认是单例的

在IOC容器中就是通过反射加工厂模式,创建和管理对象的。通过反射(xml)实例化对象都是同无参构造

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第3张图片

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第4张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第5张图片 

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第6张图片

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第7张图片

一般根据类型获取  一般通过一般bean获取一个对象。

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第8张图片  

依赖注入:

就是为类属性赋值  ,一种set注入(用的多),一种构造器注入

依赖注入之setter注入

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第9张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第10张图片 

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第11张图片 

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第12张图片 

①为List集合类型属性赋值

在Clazz类中添加以下代码:

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第13张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第14张图片 

Map集合是键值对

为Map集合类型属性赋值

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第15张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第16张图片 

使用util:list、util:map标签必须引入相应的命名空间,可以通过idea的提示功能选择 

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第17张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第18张图片 

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第19张图片 

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第20张图片 

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第21张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第22张图片 

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第23张图片 

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第24张图片 

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第25张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第26张图片 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第27张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第28张图片 

自动装配

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第29张图片 

 

  1. 基于注解管理bean

注解 和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测 到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。 本质上:所有一切的操作都是Java代码来完成的,XML和注解只是告诉框架中的Java代码如何执行。

扫描

Spring 为了知道程序员在哪些地方标记了什么注解,就需要通过扫描的方式,来进行检测。然后根据注 解进行后续操作。

标识组件的常用注解

@Component:将类标识为普通组件

@Controller:将类标识为控制层组件

@Service:将类标 识为业务层组件

@Repository:将类标识为持久层组件

@Controller、@Service、@Repository这三个注解只是在@Component注解 的基础上起了三个新的名字。

对于Spring使用IOC容器管理这些组件来说没有区别。所以@Controller、@Service、@Repository这 三个注解只是给开发人员看的,让我们能够便于分辨组件的作用。

注意:虽然它们本质上一样,但是为了代码的可读性,为了程序结构严谨我们肯定不能随便胡乱标记。

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第30张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第31张图片 

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第32张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第33张图片

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第34张图片 

 Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean_第35张图片

 

 

你可能感兴趣的:(Spring,spring,java,后端)