Spring-------注解配置多例bean

目录

  • 推荐公众号
  • 问题场景
  • 正文
    • 取值说明
  • 注意
    • 默认值

推荐公众号

有彩蛋哦!!!(或者公众号内点击网赚获取彩蛋)
程序员探索之路

问题场景

大家都知道为什么使用单例,性能+场景方面的考虑
那么什么时候使用多例呢,当前线程会改变前一个线程正在使用的值时需要考虑多例了,比如有一个共享变量A ,s1线程赋值为1,还没来得及处理此时s2线程来了赋值A为2那么s1线程得到的结果就是错误的了。
典型多例例子就是struts2的action了action本身含有请求参数的值,即可改变的状态,具体不多说了,没有仔细研究过

正文

取值说明

ConfigurableBeanFactory#SCOPE_PROTOTYPE  每次获取的时返回一个新的对象
ConfigurableBeanFactory#SCOPE_SINGLETON  单例
org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
在一次请求内有效
org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
在一个用户回话内有效

注意

当一个单例bean调用多列时 不起效,必须都配置多例
例如,a控制器注入b services a和b都需要配置成多例

默认值

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {

	/**
	 * Alias for {@link #scopeName}.
	 * @see #scopeName
	 */
	@AliasFor("scopeName")
	String value() default "";

可以看到默认值是SCOPE_SINGLETON 
	/**
	 * Specifies the name of the scope to use for the annotated component/bean.
	 * 

Defaults to an empty string ({@code ""}) which implies * {@link ConfigurableBeanFactory#SCOPE_SINGLETON SCOPE_SINGLETON}. * @since 4.2 * @see ConfigurableBeanFactory#SCOPE_PROTOTYPE * @see ConfigurableBeanFactory#SCOPE_SINGLETON * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION * @see #value */ @AliasFor("value") String scopeName() default ""; /** * Specifies whether a component should be configured as a scoped proxy * and if so, whether the proxy should be interface-based or subclass-based. *

Defaults to {@link ScopedProxyMode#DEFAULT}, which typically indicates * that no scoped proxy should be created unless a different default * has been configured at the component-scan instruction level. *

Analogous to {@code } support in Spring XML. * @see ScopedProxyMode */ ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT; }

你可能感兴趣的:(spring,boot)