共计 2478 个字符,预计需要花费 7 分钟才能阅读完成。
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 赋予了更加高级的个性,懒加载,单例作用域,生命周期办法)