spring笔记1

框架

框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

框架是对特定应用领域中的应用系统的部分设计和实现的整体结构。

因为软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟, 稳健的,他可以处理系统很多细节问题,比如,事务处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。

框架特性:约束性 支撑性 半成品项目(缺少业务逻辑)

SSM = spring + springMVC + mybatis

开发行业最著名的六大框架:
struts1,struts2,hibernate,spring,springMVC,mybatis

  • struts1减少代码量,封装的是servlet
  • struts2封装过滤器
  • MVC框架:struts1,struts2,springMVC(客户端发送一个请求,控制端处理,模型层装载并传输数据,视图层展示)【前两个基本淘汰】
  • 持久层框架:hibernate(无需建表,sql语句不用写,全自动,用起来特别简单,理解难),mybatis(半自动,sql语句要写)
  • 整合性/设计型框架:spring

Spring概述

  1. Spring 是一个开源框架
  2. Spring 为简化企业级开发而生,使用Spring, JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,而在Spring中却啡常的优雅和简洁。
  3. Spring是一个 IOC(DI)和AOP容器框架。
  4. Spring 的优良特性
    ① 非侵入性: 基于Spring开发的应用中的对象可以不依赖于Spring的API(对原来的技术不造成影响)
    ② 依赖注入: DI——Dependency Injection,反转控制(I0C]最经典的实现。
    ③ 面向切面编程 : Aspect Oriented Programming——AOP(oop,面向对象编程)
    ④ 容器: Spring 是一个容器 ,因为它包含并且管理应用对象的生命周期
    ⑤ 组件化: Spring 实现了使用简单的组件配置组合成—个复杂的应用。在Spring中可以使用XML和Java注解组合这些对象。
    ⑥ 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三
    方类库(实际上Spring自身也提供了表述层的SpringMVC和持久层的Spring JDBC)。
  5. Spring 模块
    在这里插入图片描述

IOC容器和Bean的配置

IOC和DI

IOC(Inversion of Control):反转控制

在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需
要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。

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

传统方式:我想吃饭 我需要买菜做饭
反转控制:我想吃饭 饭来张口

DI(Dependency Injection) :依赖注入

IOC的另-种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。

总结:IOC就是一种反转控制的思想,而DI是对IOC的一种具体实现。

IOC容器在Spring中的实现

前提: Spring 中有IOC思想,IOC思想必须基于IOC容器来完成,而IOC
在最底层实质上就是一个对象工厂.

  1. 在通过IOC容器读取Bean的实例之前,需要先将IOC容器本身实例化。
  2. Spring 提供了IOC容器的两种实现方式
    ①BeanFactory: IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
    ②ApplicationContext: BeamFactory 的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext ,而不是底层的BeanFactory

ApplicationContext的主要实现类

ctrl+Shift+t 查找 ctrl+t 查看该类或接口下面一系列的接口或者类
ctrl+鼠标指向 打开源码
ctrl+1 创建object

BeanFactory----》ApplicationContext----》ConfigurableApplicationContext

  1. ClassPathXmlApplicationContext: 对应类路径下的XML格式的配置文件(相对路径)
  2. FileSystemXmlApplicationContext: 对应文件系统中的XML格式的配置文件(绝对路径)
  3. 在初始化时就创建 单例的bean,也可以通过配置的方式指定创建的Bean是多实例的。

ConfigurableApplicationContext

  1. 是ApplicationContext的子接口,包含-些扩展方法
  2. refresh()和 close()让ApplicationContext具有启动、关闭和刷新上下文的能力。

WebApplicationContext

使用SpringMVC用到

专门为 WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作

容器结构图

在这里插入图片描述

给Bean的属性赋值

依赖注入的方式

  1. 通过bean的setXXX()方法赋值【property】
  2. 通过bean的构造器赋值【constructor-arg】
  3. p 名称空间
    为了简化XML文件的配置,越来越多的XML文件采用属性而非子元素配置信息。Spring从2.5版本开始引入了一个新的p命名空间,可以通过元素属性的方式配置Bean的属性。
    使用p命名空间后,基于XML的配置方式将进一步简化。
    在这里插入图片描述
    在这里插入图片描述

可以使用的值

  1. 字面量
  1. 可以使用字符串表示的值, 可以通过value属性或value子节点的方式指定
  2. 基本数据类型及其封装类、 String 等类型都可以采取字面值注入的方式
  3. 若字面值中包含特殊字符, 可以使用<![CDATA]]>把字面值包裏起来
  1. 外部声明的bern、引用其他的bean
    在这里插入图片描述
  2. 内部bean
    当bean实例仅仅给一个特定的属性使用时,可以将其声明为内部bean。内部bean声明直接包含在或元素里,不需要设置任何id或name属性
    内部bean不能使用在任何其他地方
    在这里插入图片描述

集合属性

在Spring中可以通过一组内置的XML标签来配置集合属性,例如: < list>, < set>或< map>。

数组和List

配置java.util.List类型的属性,需要指定< list>标签,在标签里包含一些元素。这些标签

可以通过< value>指定简单的常量值,通过< ref>指定对其他Bean的引用。通过< bean>指定内置bean定义。通过< null/>指定空元素。甚至可以内嵌其他集合。

数组的定义和List 一样,都使用< list>元素。

配置java.util.Set需要使用< set>标签,定义的方法与List一样。

FactoryBean

FactoryBean

Spring中有两种类型的bean, -种是普通bean,另- -种是工厂bean, 即FactoryBean。

工厂bean跟普通bean不同,其返回的对象不是指定类的一-个实例,其返回的是该工厂bean的getobject方法所返回的对象。

工厂bean 必须实现org.springframework.beans.factory.FactoryBean接口。

bean 的作用域

在Spring中,可以在< bean>元素的scope属性里设置bean的作用域,以决定这个bean
是单实例的还是多实例的。

默认情况下,Spring 只为每个在IOC容器里声明的bean创建唯一一个实例, 整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回这个唯一 的bean实例。该作用域被称为singleton,它是所有bean的默认作用域。

类别说明
singleton在SpringIOC容器中仅存在一个Bean实例, Bean以单实例的方式存在
prototype每次调用getBean()时都会返回一个新的实例
request每次HTTP请求都会创建一 个新的Bean ,该作用域仅适用于 WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean。该作用域仅适用于WebApplicatinContext环境

当bean的作用域为单例时, Spring 会在IOC容器对象创建时就创建bean的对象实例。

而当bean的作用域为prototype 时,IOC容器在获职bean的实例时创建bean的实例对象。

bean 的生命周期

  1. Spring IOC容器可以管理bean的生命周期,Spring 允许在bean生命周期内特定的时间点执行指定的任务。
  2. Spring IOC容器对bean的生命周期进行管理的过程:
    ①通过构造器或工厂方法创建bean实例
    ②为bean的属性设置值和对其他bean的引用
    ③调用bean的初始化方法
    ④bean 可以使用了
    ⑤当容器关闭时,调用bean的销毁方法
  3. 在配置 bean时,通过init-method和destroy -method属性为bean指定初始化和销毁方法
  4. bean 的后置处理器
    ①bean后置处理器允许在调用初始化方法前后对bean进行额外的处理
    ②bean后置处理器对IOC容器里的所有bean实例逐一处理,而非单一实例。其典型应用是;检查bean属性的正确性或根据特定的标准更改bean的属性。
    ③bean后置处理器需要实现接口:
    org.springframework.beans.factory.config.BeanPostProcessor在初始化方法被调用前后,Spring将把每个bean实例分别传递给上述接口的以下两个方法:
    ● postProcessBeforelnitialization(Object, String)
    ● postProcessAfterlnitialization(Object, String)
  5. 添加bean后置处理器后bean的生命周期
    ①通过构造器或工厂方法创建bean实例
    ②为bean的属性设置值和对其他bean的引用
    ③将bean实例传递给bean后置处理器的postProcessBeforelnitialization()方法
    ④调用bean的初始化方法
    ⑤将bean实例传递给bean后置处理器的postProcessAfterlnitialization()方法
    ⑥bean可以使用
    ⑦当容器关闭时调用bean的销毁方法

引用外部属性文件

当bean的配置信息逐渐增多时,查找和修改一些bean的配置信息就变得愈加困难。这时可以将一部分信息提取到 bean配置文件的外部,以properties格式的属性文件保存起来,同时在bean的配置文件中引用properties属性文件中的内容,从而实现一部分属性值在发生变化时仅修改properties属性文件即可。这种技术多用于连接数据库的基本信息的配置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值