关于springboot:如何理解Spring框架中的Bean对象

41次阅读

共计 1564 个字符,预计需要花费 4 分钟才能阅读完成。

Bean 对象的定义?

在 Spring 框架中由 Spring 创立和治理的对象的对象称之为 Bean 对象。

Bean 对象的个性?

Spring 框架为了更加迷信的治理和利用 Bean 对象,为其设计相干个性,例如:懒加载、作用域以及生命周期办法。

懒加载(Lazy)

在 Spring 框架中,默认会在启动时会创立所有的 Bean 对象, 但有些 bean 对象如果长时间不必,启动时就创建对象,会占用其内存资源,从而造成肯定的资源节约,此时咱们能够基于懒加载策略提早对象的创立,在设计类时,在类上增加 @Lazy 注解,例如:

package com.cy.pj.common.pool;
@Component
@Lazy
public class ObjectPool {public ObjectPool() {System.out.println("ObjectPool()");
  }
}

其中,@Lazy 注解中有一个 value 属性,其默认值为 true 示意提早加载。

作用域(Scope)

Spring 框架创建对象当前,能够给对象一个作用域,目标是让对象在肯定范畴内能够进行重用,罕用有单例 (singleton) 和多例 (prototype) 两种,其中:

  • singleton:此作用域指的是,名字和类型雷同的 Bean 对象实例在整个 Spring 容器中只能一份。此实例何时创立与类的提早加载个性配置无关,此实例创立当前,生命周期会由 spring 框架治理。
  • prototype:此作用域指的是,每次从 Spring 容器获取对象都会创立新实例,此实例会在须要时创立与 lazy 个性无关,这个实例创立当前,spring 能够对其初始化,但不负责销毁。

基于注解 @Scope 形式设定 Bean 作用域,代码演示:

package com.cy.pj.common.pool;、@Lazy
@Scope("singlton")
@Component
public class ObjectPool {public ObjectPool() {System.out.println("ObjectPool()");
  }
}

Spring 中默认 bean 对象的作用域为 singleton,如果心愿是 prototype 能够应用 @Scope(“prototype”)

生命周期办法

程序中每个对象都有生命周期,但不是每个对象类型定义时,都要定义生命周期办法,当一个 Bean 对象创立当前如果还需执行额定初始化,销毁之前也须要额定的其它资源的开释,Spring 框架能够为类定义其生命周期办法。如果是注解形式,咱们能够采纳如下两个注解进行实现。

  • @PostConstruct 注解用于形容 bean 对象生命周期办法中的初始化办法,此办法会在对象的构造方法之后执行(是对象创立当前的初始化)。
  • @PreDestroy 注解用于形容 Bean 对象生命周期办法中的销毁办法,此办法会在对象销毁之前执行(当作用域为 prototype 时,此办法不会执行)。

代码演示:

package com.cy.pj.common.pool;、@Lazy
@Scope("singlton")
@Component
public class ObjectPool {public ObjectPool() {System.out.println("ObjectPool()");
  }
  @PostConstruct 
  public void init() {System.out.println("init()");
  }
  @PreDestroy
  public void close() {System.out.println("close()");
  }
}

个别池对象都会设置一些生命周期办法,例如连接池。

总结(Summary)

本大节次要对 Spring 框架中的 Bean 对象个性做了一个概要剖析,能够通过这个剖析理解 Spring 框架是如何迷信利用 bean 对象的。

正文完
 0