When to use Spring prototype scope?

后端 未结 3 625
太阳男子
太阳男子 2020-12-05 00:28

I want to know when should i exactly use the prototype scope in Spring? I have understood that singleton returns the same object instance if the be

3条回答
  •  春和景丽
    2020-12-05 00:58

    As the documentation says, creating a bean Foo with prototype scope is same as calling:

    Foo foo = new Foo(dependency1, dependency2, ...);
    foo.initialize(dependency7, dependency8...);
    

    The only good reason to use a prototype scope bean instead of new that is when the dependencies used for creation and initialization of the instance should be kept outside the code that needs a new instance.

    An example is if you wanted to write persistence code similar to EJB2 Java Entity beans, such as

    Person p = ...
    p.setName("John Doe");
    p.save(); // write to DB
    

    Instead of using the JPA way

    Person p = new Person();
    p.setName("John Doe");
    personService.save(p); // write to DB
    

    In the entity bean code style, the person instance needs to know how it should be persisted, so it needs to be injected with persistence details that the code writing a person should not be aware about.

    Another example: If you want to use the non-threadsafe SimpleDateFormat Java class in many places of your application, with a format pattern from a configuration file(maybe using different formats depending on other conditions). Instead of creating a new format instance in all those places loading also the formatting string from a file (or spring property), you could use the prototype scope to get a fresh instance every time, with the details of setting the common format being in one place.

提交回复
热议问题