1. 程式人生 > 實用技巧 >Spring註解驅動開發02(作用域和懶載入)

Spring註解驅動開發02(作用域和懶載入)

Spring中bean的作用域

預設情況下,Spring只為每個在IOC容器裡宣告的bean建立唯一一個例項,整個IOC容器範圍內都能共享該例項:所有後續的getBean()呼叫和bean引用都將返回這個唯一的bean例項。該作用域被稱為singleton,它是所有bean的預設作用域。

在Spring中使用@Scope註解來設定bean的作用域

  • 不設定作用域時,兩個getBean的列印結果
com.atguigu.pojo.Person@76508ed1
com.atguigu.pojo.Person@76508ed1
  • 設定多例項作用域
    @Bean
    @Scope("prototype")  //singleton預設, 改為多例項prototype
    public Person person(){
        return new Person();
    }

列印結果

com.atguigu.pojo.Person@76508ed1
com.atguigu.pojo.Person@41e36e46

懶載入@Lazy註解(只適用於單例項bean)

預設ioc容器啟動的時候就建立bean物件

            try (ConfigurableApplicationContext ioc = new AnnotationConfigApplicationContext(MainConfig.class)) {
//            Person bean = ioc.getBean(Person.class);
//            Person bean2 = ioc.getBean(Person.class);
}

列印結果

建立bean

在bean物件上加上@Lazy懶載入後

    @Bean
    @Lazy
    public Person person(){
        return new Person();
    }

列印結果

      //沒有getBean時,無列印
      //getBean
      建立bean
      com.atguigu.pojo.Person@50a638b5
      com.atguigu.pojo.Person@50a638b5