@Scope注解的value属性有四个值,分别是singleton、prototype、request、session,value属性的值也可以直接用字符串,不用向我一样获取他们的值。
@Configuration
public class MainConfig2 {
// @Scope(value = WebApplicationContext.SCOPE_REQUEST)//request
// @Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION)//session
// @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)//prototype
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)//singleton
@Bean(name = "person")
public Person person(){
Person person = new Person();
person.setName("lqf");
person.setEmail("lqf@163.com");
return person;
}
}
singleton:1、默认值,创建的bean是单实例的 ,当使用以下代码从IOC容器中获取bean时,打印的值是true,
也就是两个bean的对象其实是同一个。
2、单实例bean会在IOC容器被创建时就创建
3、springmvc的controller使用单例
Person person = applicationContext.getBean(Person.class);
Person person1 = applicationContext.getBean(Person.class);
System.out.println(person == person1);
prototype:1、多实例的,每一次获取bean的对象都会重新创建实例,上面代码返回的值就会使false。
2、多实例bean不会再IOC容器创建时被创建,在获取bean的时候创建
3、struts2的controller使用多实例创建
request:每一次请求创建一个对象
session:每一次回话创建一个对象
request和session是在web容器中使用的,不会用到