@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");
}
}
网友评论