spring之bean的作用域

五一来了,写一篇轻松的文章;关注公众号:知识追寻者,一起努力学习。

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

bean的作用域

spring定义了多种bean的作用域,常用的4种如下:

  1. 单例(Singleton):在整个应用中,只创建bean的一个实例
  2. 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
  3. 会话(Session):在Web应用中,为每个会话创建一个bean实例。
  4. 请求(Request):在Web应用中,为每个请求创建一个bean实例。

在spring容器中由spring管理的bean默认都是单例;

2.2 单例示例

使用 @Scope
注解指定作用域类型;

单例即一个对象仅有一个实例;

被单类

/**
 * @Author lsc
 * <p> </p>
 */
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
// 等同于@Scope("singleton")
@Component
public class Sheet {

}

复制代码

配置

/**
 * @Author lsc
 * <p> </p>
 */
@Configuration
@ComponentScan
public class Config {
}
复制代码

测试

public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        // 单例测试
        Sheet sheetA = context.getBean(Sheet.class);
        Sheet sheetB = context.getBean(Sheet.class);
        // sheetA = sheetB? true
        System.out.println("sheetA = sheetB? " + sheetA.equals(sheetB));
    }
复制代码

2.2 原型示例

原型就是多例,一个对象有多个实例;

棉类

/**
 * @Author lsc
 * <p> </p>
 */
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class Cotton {
}
复制代码

测试

public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        // 原型 多例测试
        Cotton cottonA = context.getBean(Cotton.class);
        Cotton cottonB = context.getBean(Cotton.class);
        //  cottonA 与 cottonB 是否相等:false
        System.out.println("cottonA 与 cottonB 是否相等:" + cottonA.equals(cottonB));
        context.close();
    }
复制代码

原文 

https://juejin.im/post/5eabcb865188256da20e67ac

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » spring之bean的作用域

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址