SpringBoot Bean类型

SpringBoot Bean类型

按作用域分

根据作用域的不同,Bean可以分为以下六种类型

  1. Singleton(单例模式):Spring容器中只会创建一个Bean实例,所有对该Bean的请求均返回同一个实例。这是默认的作用域。

    @Configuration
    public class MyConfig{
        @Bean
        @Scope("singleton")
        public Bill getBillBean(){
            return new Bill();
        }
    }
    // 或者
    @Component
    @Scope("singleton")
    public class Bill(){
        //...
    }
    

    ℹ️ singleton字符串也可使用ConfigurableBeanFactory.SCOPE_SINGLETON替代

  2. Prototype(原型模式):每次请求该Bean时,都会创建一个新的Bean实例。因此,该Bean的生命周期和请求周期相同。

    @Configuration
    public class MyConfig{
        @Bean
        @Scope("prototype")
        public Bill getBillBean(){
            return new Bill();
        }
    }
    // 或者
    @Component
    @Scope("prototype")
    public class Bill(){
        //...
    }
    

    ℹ️ prototype字符串也可使用ConfigurableBeanFactory.SCOPE_PROTOTYPE替代

  3. Request:每个HTTP请求均会创建一个新的Request Bean实例,该Bean的生命周期将与HTTP请求的生命周期相同。仅在Web应用程序上下文中才有意义。Controller处理一个HTTP请求时,任何标记为@Scope("request")的Bean(即Request作用域的Bean)都将在整个请求的生命周期内可用。这意味着从请求开始到请求结束,包括在Controller内部处理逻辑、调用Service层、Repository层等过程中,Request作用域的Bean将保持一致,可以被自由地使用。

    @Component
    @Scope("request")
    public class AppRequestBean {
        // ...
    }
    // 或者
    @Configuration
    public class WebConfig {
        @Bean
        @Scope("request")
        public AppRequestBean appRequestBean() {
            return new AppRequestBean();
        }
    }
    

    ⚠️注意点

    • Request作用域的Bean实例在请求结束时被销毁
    • Request bean是线程安全的
  4. Session:每个HTTP Session都会创建一个新的Bean实例,该Bean的生命周期将与HTTP Session的生命周期相同,注意哈!并不是session。仅在Web应用程序上下文中才有意义。

    @Component
    @Scope("session")
    public class AppSessionBean {
        // ...
    }
    // 或者
    @Configuration
    public class WebConfig {
        @Bean
        @Scope("session")
        public AppSessionBean appSessionBean() {
            return new AppSessionBean();
        }
    }
    
  5. Global Session:该作用域仅适用于基于Portlet的Web应用程序,它表示Portlet应用程序的全局Session范围内创建Bean实例。

  6. Application:Spring 4.2引入的Scope,类似于Singleton,作用域对象是ServletContext,不是Spring容器。

按性质分

Spring中的Bean可以分为以下两种类型

  1. 普通Bean:在配置文件中定义的Bean类型就是返回类型。这是最常见的Bean类型,直接对应到Java中的一个类或接口的实现。
  2. Factory Bean:实现了FactoryBean接口的Bean。Factory Bean的返回对象不指定类的一个实例,而是生产其他Bean
posted @ 2024-07-25 19:27  勤匠  阅读(27)  评论(0)    收藏  举报