spring之bean的作用域
一 前言
五一了来一篇轻松的文章;关注公众号:知识追寻者;
知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)
二 bean的作用域
spring定义了多种bean的作用域,常用的4种如下:
- 单例(Singleton):在整个应用中,只创建bean的一个实例。
- 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
- 会话(Session):在Web应用中,为每个会话创建一个bean实例。
- 请求(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();
}