美文网首页
spring常用注解-@Scope

spring常用注解-@Scope

作者: 懒癌晚期的自律 | 来源:发表于2019-08-28 20:42 被阅读0次

Scope,也称作用域,在Soring Ioc容器指其创建的Bean对象对其他Bean对象的请求可见范围,在Spring IoC 容器中具有以下几种作用域,基本作用域(singleton,prototype),web作用域(request,session,globalsession),自定义作用域

基本作用域(singleton,prototype)

1.singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
单例的Dog

public class Dog {
    public  Dog(){
        System.out.println("this is Dog");
    }
}

配置类

@Configuration
public class MainConfig {

    @Bean
    @Scope(value = "singleton")
    public Dog dog(){
        return new Dog();
    }
}

将dog加载到spring的容器,判断是实体类是否是同一个

public class ConfigurationTest {

    public static void main(String[] args) {
        ApplicationContext anno = new AnnotationConfigApplicationContext(MainConfig.class);

        Dog dog  = (Dog) anno.getBean("dog");
        Dog beandog  = (Dog) anno.getBean("dog");
        System.out.println( "dog hash :"+dog.hashCode());
        System.out.println( "beandog hash :"+beandog.hashCode());
        System.out.println( "dog == beandog :" +(dog == beandog));
    }

}

运行结果为:

dog hash :1935122449
beandog hash :1935122449
dog == beandog :true

2.prototype:原型模式,每次通过容器getBean方法获取protetype定义bean,都将产生一个新的bean实例

将Dog类修改为多实例的方式

@Configuration
public class MainConfig {

    @Bean
    @Scope(value = "prototype")
    public Dog dog(){
        return new Dog();
    }
}

运行结果

dog hash :1164440413
beandog hash :1610525991
dog == beandog :false

当在使用singleton定义bean的时候,我们在容器获取到bean为同一个实体对象,我们使用prototype定一个bean的时候,我们从spring容器中获取到不是同一个类

singleton和pritotype两种作用域,对于singleton的作用域的Bean,每次请求该Bean都是获得相同的实例,容器的负责跟踪Bean实例的状态,负责维护Bean的生命行为;如果一个Beanb被设置为prototype作用域,程序每次请求该Bean,Spring都会新建一个Bean实例返回给程序,在这种情况下,Soring容器仅仅使用new关键字创建Bean实例,一旦创建成,容器将不再跟踪该私立,也不会维护Bean实例的状态。
如果不指定Bean的作用域,Spring默认使用singleton作用,java在创建实例是,需要进行内存申请,销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销增加。因此,prototype作用域Bean的创建,销毁的代价比较大,从而singleton作用域的Beans实例一旦创建成功,可以重复的使用,因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

相关文章

  • 第二章 Spring常用配置

    第二章 Spring常用配置 2.1 Bean的Scope @Scope注解(1) singleton:一个Spr...

  • spring常用注解-@Scope

    Scope,也称作用域,在Soring Ioc容器指其创建的Bean对象对其他Bean对象的请求可见范围,在Spr...

  • Spring系列常用注解

    附录史上最全Spring注解Spring常用注解Springboot常用45注解Springboot常用27个注解...

  • spring注解之@Scope注解

    1.@Scope注解是什么 @Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器...

  • 4.15 使用java类进行配置

    常用注解@Configuraion@Bean@Lazy@PropertySource@Scope@DependsO...

  • spring  注解--scope

    scope用法 确定生成bean的使用范围: singleton:每次生成的bean都一样,在加载IOC容器时,就...

  • Spring 概括介绍

    Spring特点 Spring 核心组件 Spring 常用模块 Spring 主要包 Spring 常用注解 b...

  • Spring注解 @Scope学习

    scope的值:默认singleton单实例,prototype原型,request,sessionsinglet...

  • Spring(二) 注解

    Spring(二) 注解 Spring中常用注解介绍 Spring中的注解配置和xml配置要实现的功能是一样的 注...

  • to Learn list

    maven B 笔记 spring IOC docBspring 笔记spring 常用注解 spring AOP...

网友评论

      本文标题:spring常用注解-@Scope

      本文链接:https://www.haomeiwen.com/subject/jomeectx.html