Bean 生命周期和作用域

前面的内容中我们看到,Bean 的创建是完全由 Spring Container 进行控制的,我们不需要手动进行创建对象的操作。进一步的,Bean 在 Container 的控制下,有自己的生命周期和作用域,本部分将简单介绍有关内容。

Singleton

Bean 默认的作用域是 Singleton:

  1. @Bean
  2. @Scope("singleton") // 默认,可以去掉
  3. //@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) 另一种写法
  4. public Person aPerson() {
  5. Person aPerson = new Person();
  6. aPerson.setName("Chester");
  7. return aPerson;
  8. }

Singleton 的含义是,在 Container 内该 Bean 只会被创建一次,后续的所有对于该 Bean 的请求都会返回同一个对象。

Prototype

另一种 Bean 的作用域是 Prototype:

  1. @Bean
  2. @Scope("prototype")
  3. public Person personPrototype() {
  4. return new Person();
  5. }

ProtoType 的含义是,每次对于 Bean 的请求,都会创建一个新的对象。

Lifecycle Callback

Spring 允许 Bean 在创建和销毁的时候注册回调:

  1. public class Foo {
  2. public void init() {
  3. // initialization logic
  4. }
  5. }
  6. public class Bar {
  7. public void cleanup() {
  8. // destruction logic
  9. }
  10. }
  11. @Configuration
  12. public class AppConfig {
  13. @Bean(initMethod = "init")
  14. public Foo foo() {
  15. return new Foo();
  16. }
  17. @Bean(destroyMethod = "cleanup")
  18. public Bar bar() {
  19. return new Bar();
  20. }
  21. }