Spring 框架支持以下作用域,应该有五种,这里只写了四中。

作用域描述
singleton该作用域将 bean 的定义的限制在每一个 Spring IoC 容器中的一个单一实例(默认)。
prototype该作用域将单一 bean 的定义限制在任意数量的对象实例。
request该作用域将 bean 的定义限制为 HTTP 请求。只在 web-aware Spring ApplicationContext 的上下文中有效。
session该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效。

下面我们测试一下singleton和prototype。

@Component
@Scope("prototype")
public class BinarySearchImpl {}

我们来测试一下(此处应该有坑)

		BinarySearchImpl bean1 = applicationContext.getBean(BinarySearchImpl.class);
		BinarySearchImpl bean2 = applicationContext.getBean(BinarySearchImpl.class);
		BinarySearchImpl bean3 = applicationContext.getBean(BinarySearchImpl.class);
		System.out.println(bean1);
		System.out.println(bean2);
		System.out.println(bean3);

观察输出的对象的地址是否一致。

我们还可以不用也自己写"prototype",而是使用Spring已经定义好的常量。

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class BinarySearchImpl {}