spring in action 学习笔记九:如何证明在scope为prototype时每次创建的对象不同。

Posted 技术让世界更精彩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring in action 学习笔记九:如何证明在scope为prototype时每次创建的对象不同。相关的知识,希望对你有一定的参考价值。

  spring 中scope的值有四个:分别是:singleton、prototype、session、request。其中session和request是在web应用中的。

下面证明当scope为prototype时每次创建的对象是不同的。

示例代码如下:

 1 package com.advancedWiring.ambiguityIniAutowiring2;
 2 
 3 import org.springframework.beans.factory.BeanNameAware;
 4 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 5 import org.springframework.context.annotation.Scope;
 6 import org.springframework.stereotype.Component;
 7 
 8 /**
 9  * Created by ${秦林森} on 2017/6/9.
10  */
11 @Component
12 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
13 public class Student implements BeanNameAware{
14     private  String name;
15     private Integer age;
16 
17     public String getName() {
18         return name;
19     }
20 
21     public void setName(String name) {
22         this.name = name;
23     }
24 
25     public Integer getAge() {
26         return age;
27     }
28 
29     public void setAge(Integer age) {
30         this.age = age;
31     }
32 
33     @Override
34     public void setBeanName(String name) {
35         System.out.println("the Student bean name is :"+name);
36     }
37 }
 1 package com.advancedWiring.ambiguityIniAutowiring2;
 2 
 3 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 4 import org.springframework.context.annotation.Bean;
 5 import org.springframework.context.annotation.ComponentScan;
 6 import org.springframework.context.annotation.Configuration;
 7 import org.springframework.context.annotation.Scope;
 8 
 9 /**
10  * Created by ${秦林森} on 2017/6/9.
11  */
12 @Configuration
13 @ComponentScan
14 public class StudentConfig {
15 
16 }
 1 package com.advancedWiring.ambiguityIniAutowiring2;
 2 
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 /**
 7  * Created by ${秦林森} on 2017/6/9.
 8  */
 9 public class Test {
10     public static void main(String[] args) {
11     
12         AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(StudentConfig.class);
13         Student student = ac.getBean(Student.class);
14         Student student2 = ac.getBean(Student.class);
15         System.out.println(student==student2);
16     }
17 }/**output:
false/

上面的测试类的运行结果是false,就说明了在scope为prototype时,spring每次创建的bean都是一个全新的对象。


以上是关于spring in action 学习笔记九:如何证明在scope为prototype时每次创建的对象不同。的主要内容,如果未能解决你的问题,请参考以下文章

spring in action学习笔记七:@Conditional注解的用法

spring in action 学习笔记十三:SpEL语言(Spring Expression Language)

spring in action学习笔记十五:配置DispatcherServlet和ContextLoaderListener的几种方式。

spring in action学习笔记十六:配置数据源的几种方式

spring in action 学习笔记八:用@Primary 或者@Qualifier消除@Autowired引起的歧义现象

spring in action学习笔记一:DI(Dependency Injection)依赖注入之CI(Constructor Injection)构造器注入