Spring - @Scope

Spring的IOC容器实例化Bean的时候默认是单例模式的,我们通过@Configuration将我们的Person类实例化到IOC容器中

//告诉Spring这是一个配置文件
@Configuration
public class SpringConfig2 {
    @Bean(name = "person")//给容器中注册一个bean
    public Person getPerson() {
        return new Person("Lisi", 20);
    }
}

我们获取两次Person的实例,进行对比得到的结果为:true

    @Test
    public void testAnnotation2() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig2.class);
        Person person1 =(Person) context.getBean("person");
        Person person2 =(Person) context.getBean("person");
        System.out.println(person1==person2);
    }

如果我们想要每次从IOC容器中获取到的实例都不一样的话我们就要在使用@Bean注解的时候使用@Scope来制定对象是单例还是不是单例,就和我们之前用xml文件配置bean标签的时候指定scope属性一致。我们通过查看api得到scope的可用值为

* @see ConfigurableBeanFactory#SCOPE_PROTOTYPE
* @see ConfigurableBeanFactory#SCOPE_SINGLETON
* @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
* @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
我们在将Person注入到IOC容器的时候指定scope的值为prototype,我们再次获取多个对象的时候进行比较结果就为:false
//告诉Spring这是一个配置文件
@Configuration
public class SpringConfig2 {
    
    @Scope(scopeName = "prototype")//多例
    //    @Scope(scopeName = "singleton")//单例(默认值)
    @Bean(name = "person")//给容器中注册一个bean
    public Person getPerson() {
        System.out.println("----->" + "getPerson");
        return new Person("Lisi", 20);
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值