通过spring注解开发,测试单例和多例区别

通过spring注解开发,测试单例和多例区别

1.注解和配置两种用法形式

 

配置版:

 

注解版:

 

 

2.在spring框架中,scope作用域默认是单例的。

注:以下测试均是注解版

3.(1)多例:

配置类:

@Configuration

public class PersonConfigure {

     //给容器中注册一个bean,类型为返回值的类型,id为方法名

   @Scope("prototype") //多例

   @Bean()

   public Person person() {

        System.out.println("bean被加载到容器中");

     return new Person("张三",23);

   }

}

 

单元测试:

@Test

public void test02() {

     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PersonConfigure.class);

     System.out.println("ioc容器加载完成");

     Person bean = (Person) context.getBean("person");

     bean.setName("lisi");

     System.out.println(bean.toString());

     Person bean1 = (Person) context.getBean("person");

     System.out.println(bean1.toString());

     System.out.println(bean==bean1);

}

}

测试结果:

 

结论:多例情况下,容器创建完成时不调用方法创建对象到容器中,在程序中获取时,才会将对象加载到容器中,而且每次调用生成的都是不同的对象。

 

(2)单例(注解版)

配置类:

//默认是单例

@Configuration

public class PersonConfigure {

     //给容器中注册一个bean,类型为返回值的类型,id为方法名

   @Bean()

   public Person person() {

    System.out.println("bean被加载到容器中");

     return new Person("张三",23);

   }

}

 

单元测试:

@Test

public void test02() {

     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PersonConfigure.class);

     System.out.println("ioc容器加载完成");

     Person bean = (Person) context.getBean("person");

     bean.setName("lisi");

     System.out.println(bean.toString());

     Person bean1 = (Person) context.getBean("person");

     System.out.println(bean1.toString());

     System.out.println(bean==bean1);

}

}

 

 

测试结果:

 

 

结论:单例情况下,容器创建时调用方法创建对象到容器中,在程序中调用bean,直接从容器中拿取,且每次拿取的都是同一个对象。如果上一次对bean里的属性做了修改,那下一次拿取的就是修改过的bean。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值