2.11 @Scope注解

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

[查看视频教程]

@Scope注解源码:

 1 package org.springframework.context.annotation;
 2 
 3 @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD})
 4 @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
 5 @java.lang.annotation.Documented
 6 public @interface Scope {
 7     @org.springframework.core.annotation.AliasFor("scopeName")
 8     java.lang.String value() default "";
 9 
10     @org.springframework.core.annotation.AliasFor("value")
11     java.lang.String scopeName() default "";
12 
13     org.springframework.context.annotation.ScopedProxyMode proxyMode() default org.springframework.context.annotation.ScopedProxyMode.DEFAULT;
14 }

@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的实例。

案例:

1 @Component
2 @Scope(value= ConfigurableBeanFactory.SCOPE_SINGLETON)
3 public class AuthorDAO implements IAutorDAO  {
4     @Override
5     public String get() {
6         return "戴着假发的程序员";
7     }
8 }

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

posted @ 2020-10-09 08:02  戴着假发的程序员0-1  阅读(226)  评论(0编辑  收藏  举报