springboot教程-@Scope详解

介绍

@Scope 注解用于指定作用范围

源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {
    @AliasFor("scopeName")
    String value() default "";

    @AliasFor("value")
    String scopeName() default "";

    ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
}

使用

搭配 @Controller@Service@Repository@Component@Bean 使用,修饰类

属性

value:取值如下:

  • singleton:单例,(默认)
  • prototype:多例
  • request
  • session
  • globalsession

解释见:
https://www.malaoshi.top/show_1IX1mKQApo4.html

例子1

修改Controller,再增加一个 IStudentService 成员变量

@RestController
public class StudentCtrl {

    @Autowired
    private IStudentService studentSrv;

    @Autowired
    private IStudentService studentSrv2;

    @Autowired
    public StudentCtrl(){
        System.out.println("StudentCtrl()构造方法");
    }
    @RequestMapping("/save")
    public JsonResult save( Student student){
//        System.out.println(student);
        System.out.println(studentSrv);
        System.out.println(studentSrv2);
        System.out.println(studentSrv==studentSrv2);
        studentSrv.save(student);
        return new JsonResult(0,"保存成功!");
    }
}

访问该 Controller,打印 studentSrvstudentSrv2 的内存地址,是一样的,而且打印 true

例子2

在上面例子基础之上,继续修改 StudentSrvImpl,增加 @Scope("prototype") 注解

@Service
@Scope("prototype")
public class StudentSrvImpl implements IStudentService {
    public StudentSrvImpl(){
        System.out.println("StudentSrvImpl构造方法"+this);
    }
    @Override
    public List<Student> query() {
        System.out.println("调用 StudentSrvImpl 的query()方法");
        return null;
    }
    public void save(Student student){
        System.out.println("调用 StudentSrvImpl 的save()方法");
        System.out.println(student.toString());
    }
}

访问 Controller,打印 studentSrvstudentSrv2 的内存地址,可以看出2个对象的 内存地址不同并且是false,说明创建了2个对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值