SpringBoot 工程中Bean对象的核心特性和注入分子

Posted Johnson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 工程中Bean对象的核心特性和注入分子相关的知识,希望对你有一定的参考价值。

一、SpringBoot工程中Bean对象的核心特征:
1、背景分析:
对于计算机而言,计算是它要解决的一个最核心的问题;那如何让计算机更加的“高效”和"低耗",这也是我们程序员再编程过程中要考虑的直接目标。
2、Spring 中Bean的特性分析:
在Spring框架中为我们Bean对象赋予课很多科学性,例如:
3、当项目启动时会将类加载到内存吗?
会,前提是:包结构必须的正确;通过JVM参数 -XX:+TraceClassLoading可以检测被加载进内存的类。
4、项目启动类在启动会默认创建类型的实例,可以通过构造方法进行校验
5、在Spring框架中为我们Bean对象赋予课很多科学特性;例如:
5.1延迟加载:对于一个池对象而言,相对与普通对象占用的资源会多一些,占用很多的资源影响性能,但是这个对象暂时不使用,那么通过@Lazy 注解,类加载到内存后暂时不创建类的实例;可以延迟实例的创建,用的时候再去创建。减少资源的占用问题(即低耗),暂时不用用的一些大对象(占用资源多的对象),可以考虑使用此特性。
5.2 作用域(让对象存储在指定作用域中然后可以重复使用--提高访问性能);@Scope("singleton")--默认作用域是单例作用域(经常创建实例,反复使用实例),此作用域通常配合延迟加载使用;@Scope("prototype")--多例作用域,每次从spring请求类的实例都会创建新的对象(使用频率小或者用一次再不用了)。不能与延迟加载配合使用(因为prototype默认就是延迟加载,无需使用@Lazy注解描述)。
5.3生命周期方法(对象在创建和销毁之前可以对对象进行一些初始化和资源销毁操作--针对于池);@PostConstruct(声明周期初始化方法,构造方法执行后执行,可以在方法内部作用一些初始化);

@PreDestroy(生命周期销毁方法,对象销毁之前执行,可以再对象销毁之前做一些资源释放操作)Spring容器负责销毁;而Spring只负责单例作用域的初始化和销毁而多例作用域Spring只负责初始化(创建)而不负责销毁,当这个多例作用域对象没有任何引用指向它,它在内存中就变成垃圾,一旦JC被触发,就有可能被销毁。
6、一般池对象的 设计应用享元设计模式,重点设计在对象的重用上。

二、SpringBoot 工程中Bean的依赖注入:
1、背景分析:
Spring框架处理要解决对应的资源消耗,对象的应用性能问题,还要考虑对象的可维护性,可扩展性。一般程序中会借助继承或者组合的方式实现这样的特性,但继承和组合就离不开耦合,那么如何降低这种耦合呢?
2、Spring 工程中的依赖注入?
Spring框架作为一个资源整合框架,为了降低类与类之间的耦合,提高程序的可扩展性,推荐存在耦合时,要尽量耦合于接口或工厂(我们现在项目中对象的创建底层是耦合了Spring的BeanFactory工厂)。

3、Spring工程中依赖注入的业务设计及实现
1)创建项目module
2)创建业务接口Cache
3)创建业务接口实现类SoftCache、WeakCache
4)定义单元测试类CacheTests,并耦合于Cache接口,

4、当Spring框架检测到由它管理的bean内部有属性使用了@Autowired注解描述,则会从spring容器中按属性剋行查找对应的Bean对象(这个过程叫依赖查找--DL);假如只有一个则直接注入,假如有多个,还会基于属性名与bean对象的名字进行匹配,如有匹配则直接注入,没有匹配则抛出异常(依赖注入异常),当然我们也可以借助@Qualifier 注解配合@Autowired注解使用,指定要注入的bean的名字。

5、Spring中的依赖注入是基于反射技术实现的。

以上是关于SpringBoot 工程中Bean对象的核心特性和注入分子的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot Bean 扫描注册核心之:ConfigurationClassPostProcessor 详解

Spring Boot核心特性之组件自动装配

Spring Boot 工程中Bean的依赖注入分析

SpringBoot 健康检查分析

springboot注解、工厂特性创建对象

Spring Boot核心注解