[Recipe] Basic Spring Program Using Component and ComponentScan Annotations

Problem: 

Create a simple spring program that uses Component and ComponentScan Annotations.

Solution Summary: 

 We will create a simple class, configure it and test it. You can configure a Spring application through xml, or Java configuration or annotations along with xml or java configuration. In this example we will use @Component and @ComponentScan annotations along with Java configuration. Note that these annotations can also be used along with xml configuration and we will see how to do that in the end.

@Component can be used over a class to tell spring to consider it as a bean component. @ComponentScan annotation  can be used along with @Configuration classes to specify the packages that need to be scanned for components. 

Prerequisites: 

Prerequisites

If you are using Maven, just copy paste right maven dependency into your pom file and all other required dependencies will be added automatically, as they are the transitive dependencies for below dependency.

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>

Please use the latest version as available in the Spring website @ http://projects.spring.io/spring-framework.

Solution: 

Bean component class

We will use a similar class as in prevoius examples, but with @Component annotation.

JJWriterComp.java

package com.javajee.spring;

import org.springframework.stereotype.Component;

@Component("writer")
public class JJWriterComp {
    public void write() {
        System.out.println("Default Writer");
    }
}

 

Config class

We need to have a class that is annotated with @Configuration, with @ComponentScan annotation as:

DemoConfig.java

package com.javajee.spring;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages="com.javajee.spring")
public class DemoConfig {

}

Instead of using @ComponentScan annotation, we can also use <context:component> element in an spring config xml.

 

Test Class

If we are using the Java configuration class, you can use the below class to test.

JJWriterCompMain.java

package com.javajee.spring;

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

public class JJWriterCompMain {
    
    public static void main(String[] args) {

        ApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class);

        JJWriterComp writer = context.getBean("writer", JJWriterComp.class);
        
        writer.write();

    }

}

 

Auto bean naming with @Component

Generally, if you don't specify a name as in this case (e.g. writer) for @Component, the bean name will be automatically generated. This will be the same name as that of the class, but with first letter made small. MyClass becomes myClass. 

However, I saw a strange behaviour. If my class name start with two capital letters and I annotate with @Component, the auto generated name starts with capital letter. Else it starts with small letter.

JJwriterComp gives JJwriterComp

JaaJwriterComp gives jaaJwriterComp

I could not find any reference for this difference in any documentation.

Recipe Tags: 

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)