Spring Boot快速入门

JDK版本:1.8
Maven版本:apache-maven-3.6.3
其他:Spring Tool Suite 4 Version: 4.5.0.RELEASE

Spring Boot核心特性

Spring boot是一个脚手架(而非框架),构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目),其核心主要有如下几个方面:

1,起步依赖(Starter Dependency)。
2,自动配置(Auto Configuration)。,
3,健康检查(Actator)-监控。

Spring Boot 环境配置

1.下载JDK1.8,并进行环境变量配置
2.Maven下载、安装和配置
3.sts下载与安装(网址https://spring.io/tools)建议下载免安装版,下载的文件为jar的形式。需要在jar文件所在的目录中执行dos命令 java -jar 下载的文件名.jar
环境变量配置、maven配置、maven与sts整合等可以问度度或者参考官方文档。

1.Spring Boot快速入门

1.1项目创建

这里快速过一下:
1.1打开项目新建窗口(快捷键ctrl+n), 搜索spring,选择spring starter 项目,next;
1.2主要填写Name Group Package的信息,next;
1.3 选择Spring Boot Version,这里选择2.2.5
1.4 点击finish。项目创建完成后,包视图(Package Explorer)结构如下:

在这里插入图片描述
在上图的项目结构中,所有的类和配置文件在项目创建好后,由sts工具帮我们创建。

1.2项目启动过程分析

找到项目的入口类(使用了@SpringBootApplication注解描述),然后运行启动类,检测启动过程,SpringBoot在启动时,控制台出现下图标识:
在这里插入图片描述
那么在项目启动时会发生什么呢?
在项目启动时,首先基于启动类注解上面的描述,进行自动配置并返回启动类所在的包名称,然后扫描本包及其子包中所有的类进行加载,然后检测类上是否有spring指定的注解描述(比如@Component,@Controller,@Service等)。假如有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例。假如此类定义了生明周期的方法,还会调用生命周期方法(比如@PostConstruct,@PreDestroy)。当实例创建以后,Spring框架还会基于类的作用域描述,将实例存储到不同作用域的容器中。

2.项目业务初步实现及测试

业务实现:基于SpringBoot脚手架,通过Spring框架进行Bean对象的管理实现。
第一步:在src/main/java下,创建一个DefaultCache类然后交给Spring 管理

package com.cy.pj.common.cache;
import org.springframework.stereotype.Component;
@Component
public class DefaultCache{

}

其中@Component是Spring用于描述bean类的一个注解,用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象存储到池(Bean池)中。

第二步:添加sringboot 测试类,进行bean的获取及测试,要放在test目录中:

package com.cy.pj.common.cache;
@SpringBootTest
public class DefaultCacheTests {
        @Autowired
        private DefaultCache defaultCache;
        @Test
        public void testCache() {
                System.out.println(defaultCache);
        }
}

其中:
@SpringBootTest 注解用于告诉spring框架,此测试类交给Spring管理,此注解只能写在test目录下,不然会编译不通过。
@Autowired注解描述属性时,用于告诉spring框架要为此属性注入一个值。

执行以上单元测试,Spring底层发生了什么呢?
项目启动时,Spring基于 @SpringBootTest 和@Component注解,创建类的实例,并且通过@Autowired注解的描述完成DefaultCacheTests实例中有关DefaultCache类型的值的注入(DI) 。

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

package com.cy.pj.common.cache;

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;

@Component
@Scope("singleton")
@Lazy(true) 
public class DefaultCache implements Cache{

	public DefaultCache() {
		System.out.println("====DefaultCache====");
	}
	
	@PostConstruct //生命周期初始化的方法,在对象构建以后执行,用于初始化一些内容
	public void init() {
		System.out.println("init()");
	}
	
	@PreDestroy//声明周期销毁方法,对象销毁之前执行,用于释放一些资源,当作用域为prototype时,此方法不会执行
	public void destory() {
		System.out.println("destory()");
	}
}

其中:

@Scope 是Spring中用于定义Bean对象作用域的一个注解,其常用的值有singleton(整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理),prototype(每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁。)等。
@Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
@PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行。
@PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。

第四步:通过测试类测试作用域,延迟加载,生命周期方法。

package com.cy.pj.common.cache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.cy.pj.common.cache.DefaultCache;

@SpringBootTest
public class DefalutCacheTests {
	@Autowired
	private DefaultCache defaultCache;//has a
	@Autowired
	private DefaultCache cache;
	//1.测试延迟加载,生命周期
	@Test
	public void testDefaultCache() {
		System.out.println(defaultCache);
	}
	//2.测试作用域
	@Test
	public void testDefalutCacheScope() {
		System.out.println(defaultCache==cache);
	}
}

小结:Spring框架管理Bean对象的优势
(1)低耗:Spring对bean对象提供了懒加载策略,可按需加载实例,减少内存消耗;同时spring框架下可以定义bean对象的作用域(比如:singleton-频繁用时可以考虑内存中只有一份,prototype-使用次数少时可以用时创建,不用时销毁);同时提供了生命周期的方法,可主动对singleton作用域的对象进行销毁管理。
(2)高效:通过定义生命周期方法,在bean对象的实例创建后进行初始化,提高程序运行效率;
(3)高维护性与高拓展性:提供@Autowired的注解为属性进行依赖注入,降低了对象与对象之间的耦合程度。

项目业务增强实现及测试

第一步:定义业务Cache接口.

package com.cy.pj.common.cache;
public interface Cache {
}

第二步:定义WeakCache/DefaultCache,实现Cache接口.

package com.cy.pj.common.cache;
import org.springframework.stereotype.Component;
@Component 
public class WeakCache implements Cache{
}
package com.cy.pj.common.cache;
@Component
public class DefaultCache implements Cache{
}

第三步:单元测试类

package com.cy.pj.common.cache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest      
public class CacheTests {
        @Autowired
        @Qualifier("defaultCache")
        private Cache cache;
        @Test
        public void testCache() {
                System.out.println(cache);
        }
}

1.@Autowired注解应用规则:
首先要检测容器中是否有与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。如果解决抛出此异常问题,我们还可以为属性或方法参数加上@Qualifier注解,同时传入一个已经定义的名称的类,例如@Qualifier(“xxxxxxx”);类名称的定义可以通过@Component传入参数指定,比如:@Component(“xxxxxxx”)
2.@Qualifier注解的作用是什么
主要用于指定注入某个名称的对象。

------------- 本文为整理于达内教育齐雷老师的教学笔记,如有侵权,请联系删除,谢谢!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值