Spring注解03 @Scope 设置组件作用域

2019-01-05  本文已影响0人  運河的縴夫

@Scope 简介

当与 {org.springframework.stereotype.Component @Component}一起用作类型级注释时,{@Scope}指示用于注释类型实例的范围。 用作方法级注释时{@Bean},{@Scope}表示要从方法返回的实例使用的作用域的名称。 注意:{@Scope}注释仅在具体bean类(对于带注释的组件)或工厂方法(对于{@Bean}方法)上进行了内省。在此上下文中{scope}表示实例的生命周期,例如{@code singleton},{@ code prototype}等。

     * ConfigurableBeanFactory#SCOPE_PROTOTYPE    
     * @see ConfigurableBeanFactory#SCOPE_SINGLETON  
     * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST  request
     * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION  sesssion
     * @return\
     * @Scope:调整作用域
     * prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。
     *                  每次获取的时候才会调用方法创建对象;
     * singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。
     *          以后每次获取就是直接从容器(map.get())中拿,
     * request:同一次请求创建一个实例
     * session:同一个session创建一个实例
     * 
     * 懒加载:
     *      单实例bean:默认在容器启动的时候创建对象;
     *      懒加载:容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;
     * 
     */
@Scope("prototype")
@Lazy

配置类

@Configuration
@ComponentScan(value = "com.tommy", useDefaultFilters = false)
public class MainConfigScope {
   
    @Bean(value = "person")
    @Scope(value = "singleton")
    @Lazy
    public Person person() {
        System.out.println("person 初始化....");
        return new Person("jm", 16, "tommy");
    }
}
上一篇 下一篇

猜你喜欢

热点阅读