一 .概述
在spring之中常用的Bean的生命周期常见的有单例模型和多例模型.
我们可以使用@Scope完成声明.
二 .@Scope
[1]创建组件
public class Car {
}
public class Bike {
}
[2]创建配置类
@Configuration
public class ScopeConfig {
@Bean
public Car car() {
return new Car();
}
@Bean
@Scope("prototype")
public Bike bike() {
return new Bike();
}
}
[3] 测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ScopeConfig.class)
public class ScopeTest {
@Autowired
private ApplicationContext context;
@Test
public void test1() {
System.out.println(context.getBean("car") == context.getBean("car"));
System.out.println(context.getBean("bike") == context.getBean("bike"));
}
查看运行结果:
true false
我们通过结果就知道Bean的Scope了.
三 . scope的默认情况
在IOC容器之中(ApplicationContext)之中,默认会将所有的单实例Bean在容器初始化完成之后,直接创建出来并且缓存到容器之中.
这样做的目的就是加速初次获取Bean的速度.
默认情况下,Scope为prototype时,每次获取对象的时候都会创建一个新的对象(构造方法会被重新调用).