@Scope-设置Bean的作用域

@Scope

@Scope:设置Bean的作用域

@Configuration 
public class MainConfig02 {
    /**
    * 	 * @Scope:调整作用域
    * 	 * prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。
    * 	 * 					每次获取的时候才会调用方法创建对象;
    * 	 * singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。
    * 	 * 			以后每次获取就是直接从容器(map.get())中拿,
    * 	 * request:同一次请求创建一个实例
    * 	 * session:同一个session创建一个实例
    */
    @Scope("singleton")
    @Bean("person")
    public Person person(){
        System.out.println("创建Person对象并放入IOC容器");
        return new Person("lishi",20);
	}
}

单实例下获取到的组件是同一个

@Test
public void test02(){
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig02.class);
    String[] names = applicationContext.getBeanDefinitionNames();
    for (String name : names) {
        System.out.println(name);
    }
    Object person1 = applicationContext.getBean("person");
    Object person2 = applicationContext.getBean("person");
    //@Scope("singleton") true
    //@Scope("prototype") false
    System.out.println(person1==person2);
}

单实例-饿汉式:单实例加载配置文件,控制台会打印容器中放入了Person对象

多实例-懒汉式:多实例加载配置文件,控制台不打印,只有等到用到时才加载组件

@Test
public void test02(){
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig02.class);
    //@Scope("singleton")  打印 创建Person对象并放入IOC容器
    //@Scope("prototype")  不打印
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值