Spring|Spring概述

Spring 介绍

Spring 是一个分层的JavaSE/EE full-stack (一站式)轻量级开源框架。分层架构允许用户自主选择每层使用的框架。Spring 的核心是 IoC(控制反转)和 AOP(面向切面)。

在三层架构中Spring 位置如下图所示:
三层架构中 spring 位置
Spring 框架具有容器的性质,容器中装什么对象就有什么功能,所以可以实现 full-stack。它不仅不排斥其他框架,还能帮助其他框架管理对象。

Spring 概念

Spring 思想:IoC 和 DI

IoC(Inverse of Control,反转控制): 将对象的创建权交给了 Spring 。

  • 以前对象的创建是由开发人员自己维护,包括依赖关系也是自己注入。
  • 使用了 Spring 之后,对象的创建以及依赖关系可以由 Spring 完成创建以及注入。
  • 反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序(Spring)。

DI(Dependency Injection,依赖注入): 在 IoC 环境中,Spring 在创建这个类的过程中将其依赖的属性设置进去。

注入方式:

  • set 方法注入
  • 构造方法注入
  • 字段注入(不推荐)

注入类型:

  • 值类型注入
  • 引用类型注入

BeanFactory 接口 & ApplicationContext 接口

BeanFactory 接口是 Spring 原始接口,针对原始接口的实现类功能较为单一。BeanFactory 接口实现类的容器,特点是每次在获得对象时才会创建对象

ApplicationContext 接口,每次容器启动时就会就会创建容器中配置的所有对象,并且提供更多功能。

ApplicationContext 的两个典型的实现类:

  • 从类路径下加载配置文件:ClassPathXmlApplicationContext(“applicationContext.xml”)
  • 从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext(“d:/xxx/yyy/xxx”)

Web开发中,使用ApplicationContext ;资源匮乏的环境下(eg.手机)可以使用BeanFactory。

Spring 配置详解

Bean 元素

基本描述:
Bean 元素描述
scope 属性:

  • singleton(默认值):单例对象。被标识为单例的对象在spring容器中只会存在一个实例。
  • prototype:多例原型。被标识为多例的对象,每次再获得才会创建。每次创建都是新的对象。
  • request:web环境下,对象与request生命周期一致。
  • session:web环境下,对象与session生命周期一致。

在未来开发中,绝大多数 scope 取值全都使用默认值(singleton)。但在整合 struts2时,ActionBean 必须配置为多例的。

生命周期属性:
init-method:配置一个方法作为生命周期初始化方法。spring会在对象创建之后立即调用。
destory-method:配置一个方法作为生命周期的销毁方法。spring容器在关闭并销毁所有容器中的对象之前调用。

使用如下所示:
在这里插入图片描述

Spring 创建对象的方式

1. 空参构造方式
在这里插入图片描述
2. 静态工厂(了解就可以)
在这里插入图片描述在这里插入图片描述
3. 实例工厂(了解就可以)
在这里插入图片描述
在这里插入图片描述

Spring 的分模块配置

可以将不同模块配置在不同文件里,然后import进来。
在这里插入图片描述

Spring 属性注入

注入方式:

1. set 方法注入

2. 构造函数注入

public User(Car car, String name) {
		System.out.println("User(Car car, String name)");
		this.name = name;
		this.car = car;
	}
	
	public User(String name, Car car) {
		System.out.println("User(String name, Car car)");
		this.name = name;
		this.car = car;
	}
	
	public User(Integer name, Car car) {
		System.out.println("User(Integer name, Car car)");
		this.name = name+"";
		this.car = car;
	}

当有多个构造函数可能引起混淆的时候,使用index和type可以进行指定。

3. p 名称空间注入

4. spel 注入

复杂类型注入:

数组:
在这里插入图片描述
在这里插入图片描述
List:
在这里插入图片描述
在这里插入图片描述
Map:
在这里插入图片描述
Properties:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值