五一来了,写一篇轻松的文章;关注公众号:知识追寻者,一起努力学习。
知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)
spring定义了多种bean的作用域,常用的4种如下:
在spring容器中由spring管理的bean默认都是单例;
使用@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)); } 复制代码
原型就是多例,一个对象有多个实例;
棉类
/** * @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(); } 复制代码