[Theory+Example] Bean Scopes in Spring

Beans in Spring can be either singletons or prototypes. Singleton means that only one instance of the bean will be maintained by the Spring and will be returned every time you call the getBean() method. If you set the scope to prototype, then a new bean will be created every time you call the getBean() method.

The default is singleton. In Java configuration, you can specify that a bean scope is prototype by specifying @Scope("prototype") over the bean definition.

 

Example

Try executing the code, first without the annotation @Scope("prototype") and then using the @Scope("prototype"). In below code I have commented out the annotation for the initial case.

Bean class: JJWriter.java

package com.javajee.spring;

class JJWriter {
    
    private String content="default";
    
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

 

Java configuration file: DemoConfig.java

package com.javajee.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Scope;

@Configuration
public class DemoConfig {

    @Bean (name = "jjwriter")
    //@Scope("prototype")
    public JJWriter getJJWriter()
    {
        return new JJWriter();
    }
}

 

Test class: JJWriterWithConfigMain.java

package com.javajee.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class JJWriterWithConfigMain {

    public static void main(String[] args) {

        ApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class);

        JJWriter writer1 = context.getBean("jjwriter", JJWriter.class);
        System.out.println("new writer1 content="+writer1.getContent());
        System.out.println("setting writer1 content as: New Content");
        writer1.setContent("New Content");
        System.out.println("writer1 content="+writer1.getContent());
        
        JJWriter writer2 = context.getBean("jjwriter", JJWriter.class);
        System.out.println("new writer2 content="+writer2.getContent());
        System.out.println("setting writer1 content as: New Content 2");
        writer2.setContent("New Content 2");
        System.out.println("writer2 content="+writer2.getContent());
        
        System.out.println("writer1 content="+writer1.getContent());
    }
}

 

Results

If you execute it without specifying any scope, the result will be as follows:

new writer1 content=default
setting writer1 content as: New Content
writer1 content=New Content
new writer2 content=New Content
setting writer1 content as: New Content 2
writer2 content=New Content 2
writer1 content=New Content 2

 

If you execute specifying the scope as prototype, the result will be as follows:

new writer1 content=default
setting writer1 content as: New Content
writer1 content=New Content
new writer2 content=default
setting writer1 content as: New Content 2
writer2 content=New Content 2
writer1 content=New Content

 

Note: In case 1 (singleton) same instance of bean is returned again, whereas in case 2 (prototype) a new instance is created. 

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)