Best practices for defining components and scanning them
Annotate the class by including the exact place where to scan for components with @ComponentScan({“com.app.service”,” com.app.repo”}) rather than providing a path like @ComponentScan(“com”) or @ComponentScan(“com.app”)
Stereotype Annotations
Spring provides predefined annotations that can be used to define specific roles or purposes of that component. @ComponentScan will scan for the annotations.
@Component is the main stereotype annotation in Spring.
Annotations defined below uses @Component implicitly.
- @Service
- @Repository
- @Controller
- @RestController
- @Configuration
Meta Annotations
Meta annotations are written by developers using the predefined stereotype annotations or annotations which can be used to annotate other annotations.
E.g of custom annotation:
@Retention(RetentionPolicy.Runtime)
@Target(ElementType.Type)
@Service
@Transctional(timeout=60)
public @interface MyTransactionalService {
String value() default "";
}
@ComponentScan("com.app.service")
recognises the above custom annotation and scans it.
@MyTransactionalService
public class TransferServiceImpl implements TransferService{
...
}
How to define Spring Beans?
- Explicitly using @Bean annotation on methods inside configuration class. ie., classes annoted with @Configuration annotation
- Implicitly using @Component and component scanning @ComponentScan
@PostConstruct and @PreDestroy
- @PostConstruct: Method called at startup after all dependencies are injected. Initialization phase. E.g.: connecting to database after bean creation and dependencies are injected.
- @PreDestroy: Method called at shutdown pripr to destroying the bean instance. Cleanup phase. E.g.: closing connections after query to db.
Related Articles
Thread Communication in Java
Interthread communication in Java package org.example; public class ThreadCommunication { private static final int DATA_SIZE = 1000; public static void main(String[] args) { //common channel for producing and consuming data Channel channel = new Channel(); Producer...
Dependency Injection Summary
Summary of dependency injection in Spring Boot. All the necessary dependencies are handed over to the object by spring. It frees the object from resolving the dependencies. It greatly simplifies the code and improves code reusability. It promotes programming to...
Various description of Big O – Time complexity algorithms
Understanding the time complexity of Big O and log. O(log N) means time goes up linearly while the n goes up exponentially. So if it takes 1 second to compute 10 elements, it will take 2 seconds to compute 100 elements, 3 seconds to compute 1000 elements, and so on....