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框架要为此属性注入一个值?(至于注入规则,后面课程慢慢加强)
③步代码设计及运行分析
描述了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时,此方法不会执行)。
⑤步通过测试类测试作用域,延迟加载,生命周期方法
Spring框架管理Bean对象有什么优势吗
Spring 是一个资源整合框架(Framework),通过spring可将很多资源(自己写的对象或第三方提供的对象,例如连接池等)整合在一起,然后进行科学应用,以便更好的对外提供服务.
思考:
- @Autowired注解应用规则?
- @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赋予了更加高级的特性,懒加载,单例作用域,生命周期方法)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。