In this quick article, we will discuss how to use @Service annotation in Spring (Spring Boot) based applications.
YouTube Video
Spring @Service Annotation Overview
The business logic of an application usually resides within the service layer – so we’ll use the @Service annotation to indicate that a class belongs to the service layer.
Well, @Service annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.
The below diagram shows a source code definition of @Service annotation. Spring context will autodetect these classes when annotation-based configuration and classpath scanning is used because it is a specialization of @Component as shown below diagram.
Whenever we annotated a class with @Service annotation then Spring Container will automatically create a Spring bean for that class.
Spring @Service Annotation Example
Let's create a simple Spring boot application to bootstrap quickly. Add the below dependencies to your pom.xml file.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Create User JPA Entity
Let's create a simple User JPA entity that maps with the users table in the database:
@Entity @Table(name = "users") class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; public User(int id, String name) { super(); this.id = id; this.name = name; } public User() {} public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Create UserRepository
Next, create a UserRepository interface and annotate with @Repository annotation:
@Repository interface UserRepository extends JpaRepository < User, Integer > { }
Note Spring Data JPA automatically provides an implementation for the above interface.
Create UserService and UserServiceImpl
interface UserService { public void saveUser(User user); } @Service class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public void saveUser(User user) { userRepository.save(user); } }
Testing
Let's write a code to test UserRepository to save user objects into the database table:
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args); UserService userService = (UserService) applicationContext.getBean("userServiceImpl"); userService.saveUser(new User(10, "Ramesh")); } }
Complete Code
Here is the complete code for your reference:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
UserService userService = (UserService) applicationContext.getBean("userServiceImpl");
userService.saveUser(new User(10, "Ramesh"));
}
}
@Entity
@Table
class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
public User() {}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Repository
interface UserRepository extends JpaRepository < User, Integer > {
}
interface UserService {
public void saveUser(User user);
}
@Service
class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public void saveUser(User user) {
userRepository.save(user);
}
}
Note that we have created ApplicationContext and retrieved bean using the getBean() method:
ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
UserService userService = (UserService) applicationContext.getBean("userServiceImpl");
userService.saveUser(new User(10, "Ramesh"));
Usage of @Service annotation
interface UserService {
public void saveUser(User user);
}
@Service
class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public void saveUser(User user) {
userRepository.save(user);
}
}
Related Spring and Spring Boot Annotations
- Spring Boot @Bean Annotation Example
- Spring @Qualifier Annotation Example
- Spring @Autowired Annotation with Example
- Spring @Bean Annotation with Example
- Spring @Configuration Annotation with Example
- Spring @PropertySource Annotation with Example
- Spring @Import Annotation with Example
- Spring @ImportResource Annotation Example
- Spring - @Lazy Annotation Example
- Spring - @Primary Annotation Example
- Spring @PostConstruct and @PreDestroy Example
- Spring @Repository Annotation
- Spring @Service Annotation
- The Spring @Controller and @RestController Annotations
- Spring Boot @Component, @Controller, @Repository and @Service
- Spring @Scope annotation with Prototype Scope Example
- Spring @Scope annotation with Singleton Scope Example
- Spring Boot @PathVariable
- Spring Boot @ResponseBody
- Spring @RequestBody - Binding Method Parameters to Request Body
- Spring Boot @ResponseStatus Annotation
- Spring Boot - Creating Asynchronous Methods using @Async Annotation
- @SpringBootTest Spring Boot Example
- @SpringBootTest vs @WebMvcTest
- @DataJpaTest Spring Boot Example
- Spring @PostConstruct and @PreDestroy Example
- Spring @GetMapping, @PostMapping, @PutMapping, @DeleteMapping and @PatchMapping
- Spring Boot @EnableAutoConfiguration Annotation with Example
- Spring Boot @SpringBootApplication Annotation with Example
Comments
Post a Comment
Leave Comment