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

业务实现基于 SpringBoot脚手架,并非框架

①步创建一个DefaultCache类,存储到src/main/java目录,然后交给spring管理
package com.cy.pj.common.cache;

@Component

public class DefaultCache {}

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

②步 添加sringboot 测试类,进行bean的获取及测试,要放在src/test/java目录
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框架要为此属性注入一个值?(至于注入规则,后面课程慢慢加强)

③步代码设计及运行分析

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

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

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

package com.cy.pj.common.pool;
@Component
@Scope("singleton")

@Lazy

public class ObjectPool {

public ObjectPool() {

 System.out.println("ObjectPool()");

}

@PostConstruct

public void init() {

System.out.println("init()");

}

@PreDestroy

public void destory() {

System.out.println("destory");

}

}
  • @Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
  • @Scope 是Spring中用于定义Bean对象作用域的一个注解,其常用的值有

singleton(整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理),prototype(每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁。)等。

  • @PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行(是对象创建以后的初始化)。
  • @PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。
⑤步通过测试类测试作用域,延迟加载,生命周期方法

image.png

Spring框架管理Bean对象有什么优势吗

Spring 是一个资源整合框架(Framework),通过spring可将很多资源(自己写的对象或第三方提供的对象,例如连接池等)整合在一起,然后进行科学应用,以便更好的对外提供服务.

image.png
思考:

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

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

Spring Boot小结

  • Spring boot 是什么? (框架,也可以看成是框架脚手架,做了架子工要做的事情-搭建项目基础骨架的工作人员)
  • Spring boot 核心优势?(启动依赖,自动配置-开箱即用,健康检查-系统监控)
  • Spring boot 项目的创建方式?( https://start.spring.io)
  • Spring boot项目启动时,Bean的初始化过程是怎样的?(查找,加载,读和存储配置,创建和存储实例对象)
  • Spring boot 项目启动时,Bean对象的依赖注入过程是怎样的?(标记,查找,注入)
  • Spring 框架中的Bean对象有什么特性?(延迟加载,作用域,生命周期方法)
  • Spring 框架中单例(singleton)作用域对象特点,应用场景(频繁用)?
  • Spring 框架中多例(prototype)作用域对象特点,应用场景(稀少用)?
  • Spring管理bean对象时有什么优势?(为bean赋予了更加高级的特性,懒加载,单例作用域,生命周期方法)

wwwwwwwwwwww
1 声望1 粉丝