Spring Boot---入门笔记

Spring boot 是什么?

脚手架而非框架,也可以看成是框架脚手架,做了架子工要做的事情-搭建项目基础骨架的工作人员

Spring boot 核心优势?

启动依赖
自动配置-开箱即用
健康检查-系统监控

Spring boot项目启动时,Bean的初始化过程是怎样的?

查找,加载,读和存储配置,创建和存储实例对象

Spring boot 项目启动时,Bean对象的依赖注入过程是怎样的?

标记,查找,注入

Spring 框架中的Bean对象有什么特性?

延迟加载,作用域,生命周期方法

Spring boot 环境配置

准备工作

下载mevan并解压(例如apache-maven-3.6.3,网址http://maven.apache.org/)

mevan基本配置

打开maven中的setting.xml文件,并对其如下选项进行配置。
配置maven本地库(从maven远程服务器下载的资源存储到的位置)

<localRepository>${user.home}/.m2/repository</localRepository>

配置maven私服(配置到mirrors标签内部)。

<mirror>
	<id>aliyun</id>
	<name>aliyun for maven</name>
	<mirrorOf>*</mirrorOf>
	<url>https://maven.aliyun.com/repository/public</url>
</mirror>

配置maven中的profile(配置到profiles标签内部),设置JDK编译和运行版本。

<profile>
   <id>jdk-1.8</id>
   <activation>
	<activeByDefault>true</activeByDefault>
      <jdk>1.8</jdk>
   </activation>
   <properties>
	   <maven.compiler.source>1.8</maven.compiler.source>
	   <maven.compiler.target>1.8</maven.compiler.target>
	   <maven.compiler.compilerVersion>
       1.8
       </maven.compiler.compilerVersion>
    </properties>
</profile>

整合mevan到开发工具中即可

具体整合过程简单,不详述,可参见百度。

项目启动过程分析(了解)

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

项目业务初步实现及测试

业务实现:
基于SpringBoot脚手架(或者架子工),通过Spring框架进行Bean对象的管理实现。

第一步:创建一个DefaultCache类然后交给spring 管理。
package com.cy.pj.common.cache;
@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管理。
@Autowired注解描述属性时,用于告诉spring框架要为此属性注入一个值。

第三步:代码设计及运行分析,如图所示:

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

第四步:为对象设计作用域,设置延迟加载,设置生命周期方法(了解)。

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

package com.cy.pj.common.cache;
@Component
	
@Scope("singleton")
@Lazy
	
public class DefaultCache {
	public DefaultCache() {
	   System.out.println("cache()");
	}
	@PostConstruct
	public void init() {
		System.out.println("init()");
	}
	@PreDestroy
	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;
@SpringBootTest
public class DefaultCacheTests {
	@Autowired
	private DefaultCache defaultCache;
	@Test
	public void testCache() {
		//???
	}
}

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

项目业务增强实现及测试

第一步:定义业务Cache接口.
package com.cy.pj.common.cache;
public interface Cache {
 
}
第二步:定义WeakCache实现Cache接口.
package com.cy.pj.common.cache;
 
import org.springframework.stereotype.Component;
 
@Component
	
public class WeakCache implements Cache{
 
}
第三步:创建或修改DefaultCache,让此类也实现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);
	}
}

业务测试运行原理分析,如图-18所示:

在这里插入图片描述
思考:

  1. @Autowired注解应用规则?
  2. @Qualifier注解的作用是什么?

@Autowired由spring框架定义,用于描述类中属性或相关方法。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性或方法,可以按照指定规则为属性赋值(DI)。其基本规则是:首先要检测容器中是否有与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。具体过程可参考图-18的设计进行自行尝试和实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值