spring应用手册-IOC(注解实现)-(11)-@Scope注解

    科技2023-12-27  100

    戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注

    @Scope注解

    spring应用手册(第二部分)

    @Scope注解源码:

    package org.springframework.context.annotation; @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Documented public @interface Scope { @org.springframework.core.annotation.AliasFor("scopeName") java.lang.String value() default ""; @org.springframework.core.annotation.AliasFor("value") java.lang.String scopeName() default ""; org.springframework.context.annotation.ScopedProxyMode proxyMode() default org.springframework.context.annotation.ScopedProxyMode.DEFAULT; }

    @Scope可以注解在某个交给spring管理的类上方,也可以注解在@Bean注解的方法上方。作用和配置文件中bean标签的scope属性一致。主要用于配置交给spring管理的bean的作用域。

    主要有以下几个值:

    singleton:单例模式(默认);    prototype:多例模式;    request:作用于web应用的请求范围;    session:作用于web应用的会话范围;

    当然我们还可以使用字符串常量配置:

    ConfigurableBeanFactory.SCOPE_SINGLETON(单利) ConfigurableBeanFactory.SCOPE_PROTOTYPE(多例) WebApplicationContext.SCOPE_SESSION(会话范围) WebApplicationContext.SCOPE_REQUEST(请求范围)

    单利模式下,spring只会为当前bean创建一个实例,每次从spring容器中获取的都是同一个对象。并且在spring容器初始化时,就会创建该对象。

    多利模式下,spring初始化时不会创建该对象,每次从spring容器中获取这个bean对象时,spring都会创建要给新的。

    回话范围和请求范围是web应用专用的,回话范围,spring会为每次回话创建要给当前Bean的实例。请求范围,spring会为每次请求创建一个当前bean的实例。

    案例:

    @Component @Scope(value= ConfigurableBeanFactory.SCOPE_SINGLETON) public class AuthorDAO implements IAutorDAO { @Override public String get() { return "戴着假发的程序员"; } }

    注意:value属性和scopeName并不是互斥的,也就是可以同时配置,但是这两个配置的范围必须一致,如果不一致会抛异常。(当然我觉得不会有人非要两个属性一起配置)

    Processed: 0.012, SQL: 8