Spring Boot 简单概述以及初步实现

1.Spring Boot 概述

现在软件市场已经形成一定的规模,系统架构的复杂度也越来越高(例如:单体架构,分布式架构,微服务架构).软件的整个架构体系正在发生很大的变化,在这种变化中,各企业之中现在更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此spring boot诞生。

2.Spring Boot 核心特性

Spring Boot 现在很多人都理解为是一个脚手架,构建于Spring框架基础之上,基于快速构建理念,提供了自动配置功能,可实现开箱即用的特性(创建一个基本项目以后,可零配置或少量配置即可运行我们的项目),其核心主要有如下几方面:
- 起步依赖(Starter Dependency)-项目创建时底层帮你关联依赖。
- 自动配置(Auto Configuration)。
- 健康检查(Actator)监控。
Spring Boot 的官方地址 :https://spring.io/projects/spring-boot

3.项目启动过程分析

3.1 首先要找到项目的入口类(使用了@SpringBootApplication注解进行描述的类为主启动入口类),然后运行启动类,检测启动过程,SpringBoot在启动时,控制台会出现SpringBoot样式图标;
如图:图-01
图-01
3.2 SpringBoot 在项目启动时,首先基于启动类上的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载,然后检测类上是否有Spring框架中指定的注解描述(例:@Component,@Controller,@Service等)。假如有,则将类交给Spring框架中的BeanFactry工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例,假如此Bean指定了生命周期方法,还会调用生命周期方法.当实例创建以后,Spring框架还会基于类的作用域描述,将实例储存到不同的作用域容器中,以实现Bean对象的科学应用。

在这里插入图片描述

4. 项目业务实现测试

业务实现:
基于SpringBoot脚手架,通过Spring框架进行Bean对象的管理实现。
准备工作:创建一个SpringBoot项目。

1.第一步:创建一个DefaultCache类,储存到src/main/java目录下,然后通过@Component交由Spring管理。
package com.lx.common.cache;
import org.springframework.stereotype.Component;

@Component
public class DefaultCache {}
  • @Component注解是Spring中用于描述Bean类的一个注解。用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象储存到(Bean池)池中。
2. 第二步: 添加SpringBoot 测试类,进行Bean的获取测试,测试类要在src/test/java目录下(注意:测试类所在的包必需和启动类包结构相同)
package com.lx.common.cache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class DefaultCacheTests {// is a Object
	@Autowired
	private DefaultCache defaultCache;// has a 
	@Test
	public void testCache() {
		System.out.println(defaultCache);
	}
}

输出结果:
在这里插入图片描述

  • @SpringBootTest注解用于告诉Spring框架,此测试类交给spring管理.
  • @Autowired注解[描述属性时,用于告诉spring框架要为此属性注入一个值.
  • @Autowired由spring框架定义,用于描述类中属性或相关方法(例如构造方法)。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性或方法,可以按照指定规则为属性赋值(DI)。其基本规则是:首先要检测容器中是否有与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。
3.第三步: 代码设计及运行分析

在这里插入图片描述
图中描述了DefaultCacheTests类于DefaultCache类的关系,这两个类通过指定的注解(@SpringBootTest,@Component)进行描述,告诉Spring框架这两个类实例的创建由Spring框架负责,并且由Spring框架基于@Autowired注解的描述完成DefaultCacheTests实例中有关DefaultCache类型的值的注入(DI).

4.第四步:为对象设计作用域,设置延迟加载,设置生命周期方法.

在Spring框架中,Spring为由它创建和管理对象,设计了一些特性,例如作用域,延迟加载,生命周期方法等,基于这些特性实现对bean对象的管理.

package com.lx.common.pool;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Lazy//该注解表示告诉spring框架此类支持延迟加载,通常会配合单例作用域使用
@Scope("singleton")//是Spring中用于定义Bean对象作用域的一个注解,其常用的值有singleton
//@Scope("prototype")//prototype
@Component//表示此类交由spring管理
public class ObjectPool {
	public ObjectPool() {
		System.out.println("ObjectPool()...");}
	
	@PostConstruct//用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行(是对象创建之后的初始化)
	public void init() {
		System.out.println("init()...");}
	
	@PreDestroy//用于描述bean对象生命周期方法中的销毁方法,此方法会在对象销毁前执行(当作用域为prototype时,此方法不会执行)
	public void destory() {
		System.out.println("destory()...");}
}


其中:

  • @Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
  • @Scope 是Spring中用于定义Bean对象作用域的一个注解,其常用的值有
    singleton(整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理),prototype(每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁。)等。
  • @PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行(是对象创建以后的初始化)。
  • @PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行).
5.第五步: 通过测试类测试作用域,延迟加载,生命周期方法.
package com.lx.common.cache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.lx.common.pool.ObjectPool;

@SpringBootTest
public class ObjectPoolTests {
	@Autowired
	private ObjectPool objectPool;
	@Test
	public void testObjectPool() {
	System.out.println("testObjectPool()...");
	}
}

  • 执行结果:
    在这里插入图片描述
    Spring 是一个资源整合框架(Framework),通过spring可将很多资源(自己写的对象或第三方提供的对象,例如连接池等)整合在一起,然后进行科学应用,以便更好的对外提供服务。
    在这里插入图片描述
    Spring框架可以为由它管理的对象(Bean)提供懒加载策略(对象暂时用不到,则无需加载和实例化),作用域(例如singleton-频繁用时可以考虑内存中只有一份,prototype-使用次数少时可以用时创建,不用时销毁),生命周期方法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的有效使用。同时Spring框架还可以基于用户设计管理对象与对象的依赖关系,以降低对象与对象之间的直接耦合,提高程序的可维护性和可扩展性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值