Spring单例 和 Scope注解

关键字  @Scope  @Qualifier  Singleton

 

单例

Spring是单例模式。结合Springboot的例子。

Controller

@Autowired private TestBean tb;

@RequestMapping("/single")
public String single() {
        tb.setAge(tb.getAge() + 10 );
        // 每次输出的hashcode一样,同一个实例。age在累加,也证明是单例。
        return String.valueOf(tb.getAge()) + "===>" + this.hashcode();   
}

 

Bean

@Component
public class TestBean {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

从不同的客户端或者机器访问url   /single  均返回累加值,证明是单例。因此Spring单例模式中谨慎使用类变量。

单例不阻塞

两个不同IP的请求,请求到同一个单例controller中的sleep方法,均会执行,不会因为一个sleep, 另一个阻塞

    @RequestMapping("/sleep")
    public String sleep() throws InterruptedException {
        System.out.println("begin sleeping");
        Thread.sleep(100 * 1000);
        return "finish sleeping";
    }

 

Scope

Bean的Scope标签可以指定bean在Spring单例的范围和是否为单例,解释常用的两个

(1)singleton:在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 (默认)
(2)prototype:每次获得bean都会生成一个新的对象

 

转载于:https://www.cnblogs.com/webglcn/p/10655036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值