spring

spring是javaEE开源的轻量级别的框架,可以解决企业开发中遇到的难题,能够让编程变得简单,核心组件IOC容器和AOP面向切面编程

  1. IOC控制反转:把整个对象创建的过程,统一交给我们的SpringIOC容器进行管理来实现管理,底层使用反射+工厂模式
  2. Aop面向切面编程:对我们功能(方法)前后实现增强,比如打印日志,事务原理,权限管理,底层是基于动态代理模式实现的
    减少到我们代码冗余的问题

优势:

  • 方法的解耦,简化开发
  • AOp技术支持
  • 提供声明事务支持
  • Junit单元测试
  • 方便整合其他框架
  • 降低了 JavaEEAPI开发的难度

spring-概述-速览_spring

介绍:::::::

Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);
Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;
Spring AOP:AOP服务;
Spring Web:提供了基本的面向Web的综合特性,提供对常见框架如Struts2的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器;
Spring MVC:提供面向Web应用的Model-View-Controller,即MVC实现。
Spring DAO:对JDBC的抽象封装,简化了数据访问异常的处理,并能统一管理JDBC事务;
Spring ORM:对现有的ORM框架的支持;

Spring配置bean 容器注入:

注解或者xml方式: bean实际上就是一个对象

加载到我们的Spring配置文件

根据bean的id获取到对象

bean的id不能重复

bean的id命名一般为类的首字母小写

class类路径

SpringIOC容器原理:

IOC容器中非常核心的接口: BeanFactory bean对象 Factory工厂

IOC容器基本概念

IOC容器基本概念::控制反转: 降低计算机代码的冗余度

把对象的创建对象与使用统一交给我们的Spring来进行管理 不需要开发者自己去new对象

创建对象的方式由哪些:

  • 单独的new方式----耦合度太高
    每次单独new对象,没有实现统一的管理对象,如果后期需要userDao的名称信息发布的情况下,需要改变的引用的地方比较多,耦合度太高
  • 工厂模式–降低我们的耦合度
    概念:统一管理和维护我们每个对象创建与使用的过程
    不需自己new对象
  • 反射模式

Iocr容器底层实现的技术

:反射技术, 工厂模式 .解析XML

  1. 使用解析XML技术.解析Spring.xml配置文件
  2. 获取<bean\ id=’’ class=’’/> 类的完整路径地址
  3. 使用到反射技术初始化对象
  4. 使用工厂模式封装初始化对象

IOC核心接口

  1. IOC容器接口
  2. IOC容器底层基于反射 +工厂实现的
  3. Spring体系中提供了两种IOC容器的实现方案
    _______3.1BeanFactory不是提供给给开发人员的 主要提供给我们Spring内部自己实现
    加载配置文件的时候不会根据配置文件的内容创建对象,当我们真正徐娅使用该对象的时候才会创建对象
    ___3.2ApplicationFactory是提供给我们开发人员使用的,对于我们传统的BeanFactory实现非常多的扩 展 功能,ApplicationFactory属性BeanFactory接口下的子接口
    加载配置文件的时候,会根据配置文件的内容创建对象,并且缓存起来
    javaweb项目的时候, 使用ApplicationFactory
    刚启动的时候,程序卡,后面就好了,
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onKBiowC-1617851036643)(file:///

ApplicationFactory主要实现的类:

ClassPathXmlApplicationContext:对应类路径下的XML格式的配置文件

FileSystemXmlApplicationContext: 对应文件系统中的xml格式的配置文件

spring-概述-速览_反射技术_02

SpringBean的注入方式:

创建对象和set注入属性

SpringBean管理方式

什么是bean管理了?

  1. Spring创建对象(使用反射技术实现)
  2. Spring对我们对象注入属性

Bean管理方式有哪些

  1. 基于XML方式管理bean对象
    需要创建一个bean配置文件,需要在该配置文件中,定义一个​​​bean​​​标签
    ​​​<bean\ id='' class=''/>​​​​id:​​​ 不允许重复 bean id
    ​​​bean​​​的id命名一般为类的首字母小写
    ​​​class:​​ 当前该类完整路径(类名+包名称)组合,底层使用反射技术初始化对象,默认的情况下,执行无参构造
  2. 基于注解的方式管理bean对象(Springboot)

SpringBean的注入方式:

基于XML方式注入属性

依赖注入:对象的属性注入值:(Spring实现)

  1. 第一种实现方式: 基于对象属性Set方法实现
  2. 第二中::: 基于有参数构造函数实现
  3. p标签 wei’属性注入值 最终还是set方法

bean属性: 特殊符号做<<>>

  1. 特殊符号
  2. cdata
    字面量

spring-概述-速览_编程语言_03

spring-概述-速览_编程语言_04

注入内部Bean

spring-概述-速览_反射技术_05

spring-概述-速览_spring_06

spring-概述-速览_编程语言_07

级联赋值

注入属性要使用 set get方法

spring-概述-速览_编程语言_08

注入集合类型的属性

list array map

IOC操作Bean的管理

Spring 中bean的类型由两种,分别为普通Bean和工厂bean类型(Factory bean)

Factory bean 与普通bean的区别

普通bean : 在配置文件中定义什么类型,就必须返回类型保证一致

Factory bean: 在配置文件中定义什么类型,可以与返回类型不一致

SpringBean的作用域

什么是作用域

设定bean作用域是为单例还是多例

作用域单例与多例有什么区别

  1. 单列的作用域: 每次在调用getBean获取对象都是为了同一个对象
  2. 多例的作用域: 每次在调用getbean方法获取对象都是一个新的对象

注意: 在Spring默认情况下,bean的作用域就是单例, 节约服务器内存

单例:

在同一个JVM中,该bean对象只会创建一次

多例:

在同一个JVM中,该bean对象会创建多次 占内存

设置​​scope="prototype"​​ 设置为多例

spring-概述-速览_编程语言_09

SpringBean的声明周期

声明周期: bean的后置处理器

简单分为: 实例化----> 属性赋值 —> bena类中init方法–> 使用该对象–> 容器关闭

  1. 反射技术初始化对象(默认 无参构造函数) 对象已经初始化完成了
  2. 给该对象中的属性 赋值–反射技术的实现

==========Bean后置处理器 在init方法之前执行

3 调用Bean设定init的方法

========Bean后置处理器 在init方法之后执行

4 正常使用到该Bean对象

5 容器关闭—该对象就会被撤销执行 该对象Bean对象中 销毁方法

生命周期: 后置处理器

可以配置多个 (​​Order​​值 越小 越优先先加载)

  1. 反射技术初始化对象(无参构造函数)

spring-概述-速览_反射技术_10

反射技术给对象中的属性赋值 反射技术调用init方法 反射技术销毁的方法