@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容器中使用的,不会用到