018 使用@Scope完成bean的作用域的声明

一 .概述

在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时,每次获取对象的时候都会创建一个新的对象(构造方法会被重新调用).

原文地址:https://www.cnblogs.com/trekxu/p/9094866.html