@Scope 指定bean的作用域
@Scope用来配置bean的作用域,等效于bean xml中的bean元素中的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;
}
@Scope可以用在类上和方法上
参数:value和scopeName效果一样,用来指定bean作用域名称,如:singleton、prototype
常见2种用法
- 和@Compontent一起使用在类上
- 和@Bean一起标注在方法上
和@Compontent一起使用在类上
@Component
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)//@1
public class ServiceA {
}
上面定义了一个bean,作用域为单例的。
@1:ConfigurableBeanFactory接口中定义了几个作用域相关的常量,可以直接拿来使用,如:
String SCOPE_SINGLETON = “singleton”;
String SCOPE_PROTOTYPE = “prototype”;
和@Bean一起标注在方法上
@Bean标注在方法上,可以通过这个方法来向spring容器中注册一个bean,在此方法上加上@Scope可以指定这个bean的作用域,如:
@Configurable
public class MainConfig2 {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public ServiceA serviceA() {
return new ServiceA(