Spring 概念和耦合解耦、IOC、依赖注入

主要内容:spring框架的概述以及spring中基于XML的IOC配置
在这里插入图片描述

要明白的知识:

spring的IoC能解决什么问题
如果搭建spring中基于XML的IOC配置
如何使用spring的注入实现类之间的依赖关系

1、Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架

a. 以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核
b. 提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术

优点:

  1. 方便解耦,简化开发
    通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
  2. AOP编程的支持
    通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
  3. 声明式事务的支持
    可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量
  4. 方便程序的测试
    可以用非容器依赖的编程方式进行几乎所有的测试工作
  5. 方便集成各种优秀框架
    Spring 可以降低各种框架的使用难度,提供了对各种优秀框架( Struts、 Hibernate、 Hessian、 Quartz等)的直接支持。
  6. 降低 JavaEE API 的使用难度
    Spring 对 JavaEE API(如 JDBC、 JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。
  7. Java 源码是经典学习范例
    Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以
    及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。

2、 IOC的概念,程序的耦合和解耦

在这里插入图片描述

	工厂模式解耦:
	一个创建Bean对象的工厂
		Bean:在计算机英语中,有可重用组件的含义
		JavaBean:用java语言编写的可重用组件
			Javabean > 实体类
			
		  它就是创建我们的service和dao对象的
	第一个:需要一个配置文件来配置我们的service和dao
		配置的内容:唯一标识=全限定类型(key=value)
	第二个:通过读取配置文件中配置的内容,反射创建对象

我的配置文件可以是xml也可以是properties

IoC的概念

IoC 控制反转,把创建对象的权利交给框架,IoC包括依赖注入(Dependency Injection DI)和依赖查找(Dependency Lookup)

IoC 的作用:

削减计算机程序的耦合(解除我们代码中的依赖关系)。

IoC只能解决程序间的依赖关系

3、spring IoC解决程序耦合

  • spring基于XML的IoC环境搭建和入门:

    • spring依赖说明:
      在这里插入图片描述
    • Spring的体系结构:
      在这里插入图片描述
      获取配置文件,创建独享,并把对象放入map中 的工作交给spring来解决
      在这里插入图片描述
      用户需要的就是创建配置文件,把配置信息交给spring,并且换一个对象,去得到核心容器再根据唯一标志的到容器即可

在这里插入图片描述
ApplicationContext的三个常用实现类

  • ClassPathXmlApplicationContext:可以加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话,加载不了
  • FileSystemXmlApplicationContext:它可加载磁盘任意路径下的配置文件(必须由访问权限)
  • AnnotationConfigApplicationContext:它用于读取注解创建容器

核心容器的两个接口引发出的问题:

  • ApplicationContext:单例模式适用
    一般适用此接口定义容器对象

    它在创建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。

  • BeanFactory:多例模式适用

    它在创建核心容器时,创建对象采用的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。

在这里插入图片描述

4、spring框架中的bean细节

spring框架对bean的管理细节

  1. 创建bean的三种方法
  • 第一种:使用默认的构造函数创建
    在spring的配置中使用bean标签,配以id和class属性之后,且没有其他属性和标签时
    采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建

问:通过class获取的是InstanceFactory类,如果没有默认构造函数,xml文件没有办法取到该类中的构造函数返回的对象,取不到返回值对象
在这里插入图片描述

  • 第二种:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器
    在这里插入图片描述
    有一个工厂对象,里面有方法可以为我们创建service对象,
    需要定义一个service对象,里面有个id 需要把对象取出来, 这个id是由factory-bean中的方法中的factory-method方法取出来的

  • 第三种:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)

这个其实是jar包中的文件

在这里插入图片描述

  1. bean对象的作用范围

bean的作用范围调整
bean标签的scope属性

作用:用于指定bean的作用范围
取值:常用的就是单例的和多例的

singleton:单例的(默认值)
prototype:多例的
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session

在这里插入图片描述

负载均衡:

全局session:

  1. bean对象的生命周期
  • 单例对象:立即
    出生:当容器创建时对象出生
    活着:只要容器还在,对象一直活着
    死亡:容器销毁,对象消亡
    总结:单例对象的生命周期和容器相同
  • 多例对象:延迟
    出生:当我们使用对象时spring框架为我们创建
    活着:对象在使用过程中就一直活着
    死亡:当对象长时间不用且没有别的对象引用时,由java的垃圾回收器回收

在这里插入图片描述

5、spring的依赖注入

  • 依赖注入:
    Dependency Injection
  • IoC的作用:
    降低程序间的耦合(依赖关系)
  • 依赖关系的管理:
    以后都交给了spring来维护
  • 在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明依赖关系的维护。(依赖注入)

依赖注入:

能注入的数据:
① 基本类型和String
② 其他bean类型(在配置文件中或注解配置过的bean)
③ 复杂类型/集合类型

注入方式:

在这里插入图片描述

在这里插入图片描述

2.
③ 使用注解提供

posted @ 2020-11-17 11:23  your_棒棒糖  阅读(51)  评论(0编辑  收藏  举报