In this post we will discuss about the basic spring boot annotations that are very important to know to start with spring boot. We will see these annotations mostly in every RESTful web service with spring boot.
Most important spring boot annotations:
- @SpringBootApplication
- @Configuration
- @EnableAutoConfiguration
- @RestController
- @RequestMapping
- @RequestParam
- @PathVariable
- @RequestBody
- @Controller
- @ResponseBody
- @ComponentScan
- @Component
- @Service
- @Repository
- @Bean
- @Qualifier
- @Autowired
- @GetMapping
- @PostMapping
- @PutMapping
- @PatchMapping
- @DeleteMapping
SpringBootApplication
Indicates a configuration class that declares one or more @Bean
methods and also triggers
auto-configuration and component scanning. This is a convenience annotation that is equivalent to declaring
@Configuration
, @EnableAutoConfiguration
and @ComponentScan
.
Configuration
@Configuration
annotation indicates that a class declares one or more @Bean
methods and
may be processed by the Spring container to generate bean definitions and service requests for those beans at
runtime.
@Configuration public class AppConfig { @Bean public MyBean myBean() { // instantiate, configure and return bean ... } }
EnableAutoConfiguration
@EnableAutoConfiguration
annotation enable auto-configuration of the Spring Application Context,
attempting to guess and configure beans that you are likely to need.
The package of the class that is annotated with @EnableAutoConfiguration
, usually via @SpringBootApplication
,
has specific significance and is often used as a 'default'. It is generally recommended that you place
@EnableAutoConfiguration (if you're not using @SpringBootApplication) in a root package so that all sub-packages
and classes can be searched.
RestController
@RestController
annotation, which marks the class as a controller where every method returns a
domain object instead of a view. It’s shorthand for @Controller
and @ResponseBody
rolled together.
RequestMapping
@RequestMapping
annotation for mapping web requests onto methods in request-handling classes with
flexible method signatures. @RequestMapping
maps all HTTP operations by default.
Use @RequestMapping(method=GET)
to narrow this mapping.
@RestController @RequestMapping("/greeting") public class GreetingController { @RequestMapping("/admin") public void greetingAdmin() {} }
RequestParam
@RequestParam
annotation which indicates that a method parameter should be bound to a web
request parameter.
@RequestMapping(value = "/greeting", method = RequestMethod.GET) public String greeting(@RequestParam("name") String name){ return "Hello "+name; }
PathVariable
@PathVariable
annotation which indicates that a method parameter should be bound to a URI template
variable.
@RequestMapping("/search/{id}") public Long searchById(@PathVariable("id") Long id) { return id; }
Using GetMapping with @PathVariable:
@GetMapping("/search/{id}") public Long searchById(@PathVariable("id") Long id) { return id; }
RequestBody
@RequestBody
annotation indicating a method parameter should be bound to the body of the web
request.
Optionally, automatic validation can be applied by annotating the argument with @Valid
annotation.
@PostMapping("/create") public void test(@Valid @RequestBody Payload payload) { //... do something }
Controller
@Controller
indicates that an annotated class is a "Controller" (e.g. a web controller).
This annotation serves as a specialization of @Component
, allowing for implementation classes to be
autodetected through classpath scanning. It is typically used in combination with annotated handler methods
based on the @RequestMapping
annotation.
@Controller @RequestMapping("/greeting") public class GreetingController { @GetMapping("/search/{id}") @ResponseBody public Long searchById(@PathVariable("id") Long id) { return id; } }
ResponseBody
@ResponseBody
annotation that indicates a method return value should be bound to the web response
body. Supported for annotated handler methods in Servlet environments.
As of version 4.0 this annotation can also be added on the type level in which case it is inherited and does not need to be added on the method level.
@Controller @RequestMapping("/greeting") public class GreetingController { @GetMapping("/search/{id}") @ResponseBody public Long searchById(@PathVariable("id") Long id) { return id; } }
You can use the this annotation at type level so that you don't need to add at every method level.
@Controller @RequestMapping("/greeting") @ResponseBody public class GreetingController { @GetMapping("/search/{id}") public Long searchById(@PathVariable("id") Long id) { return id; } }
ComponentScan
Spring does not know about beans/components unless it know where to search it. Once you define a Component Scan for a package, Spring would search the package and all its sub packages for components/beans.
If your other packages hierarchies are below your main app with the @SpringBootApplication
annotation, All components/beans will implicitly covered by components scan.
If youe beans/components packages are not sub packages of main package, You should manually add the @ComponentScan
annotation.
Component
@Component
indicates that an annotated class is a "component". Such classes are considered as
candidates for auto-detection when using annotation-based configuration and classpath scanning; registered in
application context as spring bean.
@Component public class ComponentDemo { }
Service
@Service
indicates that an annotated class is a "service". This annotation is specialization of the
@Component
annotation. It doesn’t currently provide any additional behavior over the @Component
annotation, but it’s a good idea to use @Service
over @Component
in service-layer
classes because it specifies intent better.
Repository
@Repository
annotation that indicates that the decorated class is a repository. A repository is a
mechanism for encapsulating storage, retrieval, and search behavior which emulates a collection of objects. It
is a specialization of the @Component
annotation allowing for implementation classes to be
autodetected through classpath scanning.
Bean
@Bean
indicates that a method produces a bean to be managed by the Spring container.
@Bean public MyBean myBean() { // instantiate and configure MyBean obj return obj; }
Qualifier
This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.
Autowired
Marks a constructor, field, setter method or config method as to be autowired by Spring's dependency injection facilities
@Component public class GreetingComponent { // field autowired @Autowired private Environment env; // constructor autowired GreetingComponent(ApplicationContext context) { } }
GetMapping
GetMapping
annotation for mapping HTTP GET requests onto specific handler methods.
Specifically, @GetMapping
is a composed annotation that acts as a shortcut for
@RequestMapping(method = RequestMethod.GET).
@GetMapping("/search/{id}") public Long searchById(@PathVariable("id") Long id) { // do something .. return id; }
PostMapping
PostMapping
annotation for mapping HTTP POST requests onto specific handler methods.
Specifically, @PostMapping
is a composed annotation that acts as a shortcut for
@RequestMapping(method = RequestMethod.POST).
@PostMapping("/create") public void test(@Valid @RequestBody Payload payload) { //... do something }
PutMapping
PutMapping
annotation for mapping HTTP PUT requests onto specific handler methods.
Specifically, @PutMapping
is a composed annotation that acts as a shortcut for
@RequestMapping(method = RequestMethod.PUT).
PatchMapping
PatchMapping
annotation for mapping HTTP PATCH requests onto specific handler methods.
Specifically, @PatchMapping
is a composed annotation that acts as a shortcut for
@RequestMapping(method = RequestMethod.PATCH).
DeleteMapping
DeleteMapping
annotation for mapping HTTP DELETE requests onto specific handler methods.
Specifically, @DeleteMapping
is a composed annotation that acts as a shortcut for
@RequestMapping(method = RequestMethod.DELETE).
factorial hundred In the last few days, the “factorial of 100” is one of the top subjects and a lot of maths geeks compute it using voice assistants such as Alexa, Shiri, etc.
ReplyDeletefactorial hundred In the last few days, the “factorial of 100” is one of the top subjects and a lot of maths geeks compute it using voice assistants such as Alexa, Shiri, etc.
factorial hundred In the last few days, the “factorial of 100” is one of the top subjects and a lot of maths geeks compute it using voice assistants such as Alexa, Shiri, etc.