Home > html

Tất Cả Các Annotations Quan Trọng Trong Java Spring Boot: Hướng Dẫn Chi Tiết

Tất Cả Các Annotations Quan Trọng Trong Java Spring Boot: Hướng Dẫn Chi Tiết

Dưới đây là danh sách các annotations phổ biến trong Java Spring Boot, chia thành các nhóm dựa trên mục đích sử dụng:

1. Annotations cho Spring Boot Application

@SpringBootApplication: Kết hợp của @Configuration, @EnableAutoConfiguration@ComponentScan. Được sử dụng để đánh dấu lớp chính của Spring Boot Application.

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@EnableAutoConfiguration: Cho phép Spring Boot tự động cấu hình ứng dụng của bạn.

@EnableAutoConfiguration

@ComponentScan: Tự động quét và đăng ký các component trong package.

@ComponentScan("com.example")

2. Annotations cho Beans và Components

  • @Component: Đánh dấu một lớp là một bean
@Component
public class MyComponent {
}

@Service: Đánh dấu lớp là service, thường dùng cho các lớp service trong ứng dụng.

@Service
public class MyService {
}

@Repository: Đánh dấu lớp là repository, thường dùng cho các lớp thao tác với cơ sở dữ liệu.

@Repository
public class MyRepository {
}

@Controller: Đánh dấu lớp là controller trong ứng dụng web.


@Controller
public class MyController {
}

@RestController: Tương tự như @Controller, nhưng tự động thêm @ResponseBody để trả về dữ liệu dạng JSON hoặc XML.

@RestController
public class MyRestController {
}

@Configuration: Đánh dấu lớp chứa các cấu hình của ứng dụng.

@Configuration
public class MyConfig {
}

@Bean: Được sử dụng trong lớp @Configuration để tạo bean.

@Bean
public MyBean myBean() {
    return new MyBean();
}

3. Annotations cho Dependency Injection

  • @Autowired: Tự động tiêm dependency vào các component.
@Autowired
private MyService myService;

@Qualifier: Dùng khi có nhiều bean cùng loại, để xác định bean cần tiêm.

@Autowired
@Qualifier("myService")
private MyService myService;

@Value: Tiêm giá trị từ các tệp cấu hình hoặc thuộc tính vào bean.

@Value("${my.property}")
private String myProperty;

4. Annotations cho Web

  • @RequestMapping: Đánh dấu phương thức hoặc lớp xử lý yêu cầu HTTP.
@RequestMapping("/home")
public String home() {
    return "home";
}

@GetMapping: Đánh dấu phương thức xử lý yêu cầu HTTP GET.

@GetMapping("/users")
public List<User> getUsers() {
    return userService.findAll();
}

@PostMapping: Đánh dấu phương thức xử lý yêu cầu HTTP POST.

@PostMapping("/users")
public User createUser(@RequestBody User user) {
    return userService.save(user);
}

@PutMapping: Đánh dấu phương thức xử lý yêu cầu HTTP PUT.

@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
    return userService.update(id, user);
}

@DeleteMapping: Đánh dấu phương thức xử lý yêu cầu HTTP DELETE.

@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
    userService.delete(id);
}

@RequestParam: Truyền tham số từ URL vào phương thức.

@GetMapping("/users")
public List<User> getUsers(@RequestParam String name) {
    return userService.findByName(name);
}

@PathVariable: Lấy giá trị tham số từ URL.

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
    return userService.findById(id);
}

@RequestBody: Đánh dấu tham số đầu vào của phương thức là dữ liệu trong body của HTTP request (thường là JSON).

@PostMapping("/users")
public User createUser(@RequestBody User user) {
    return userService.save(user);
}

@ResponseBody: Đánh dấu phương thức trả về dữ liệu trực tiếp thay vì view.

@GetMapping("/user")
@ResponseBody
public User getUser() {
    return userService.getUser();
}

5. Annotations cho Validation và Binding

  • @NotNull: Đảm bảo trường không được null
@NotNull
private String name;

@Size: Đặt độ dài tối thiểu và tối đa cho chuỗi.

@Size(min = 3, max = 50)
private String username;

@Valid: Đánh dấu đối tượng cần được kiểm tra validation.

@PostMapping("/user")
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
    userService.save(user);
    return ResponseEntity.ok(user);
}

@Min, @Max: Đặt giá trị tối thiểu và tối đa cho một số.

@Min(18)
private int age;

6. Annotations cho AOP (Aspect-Oriented Programming)

  • @Aspect: Đánh dấu lớp là một aspect.
@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Method called: " + joinPoint.getSignature());
    }
}

@Before, @After, @Around: Đánh dấu phương thức cần thực thi trước, sau hoặc quanh một phương thức khác.

@Before("execution(* com.example.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
    System.out.println("Method called: " + joinPoint.getSignature());
}

7. Annotations cho Configuration

  • @ConfigurationProperties: Tiêm cấu hình từ tệp cấu hình vào đối tượng
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private String name;
    private String version;
    // getters and setters
}

@PropertySource: Xác định tệp cấu hình cho ứng dụng.

@PropertySource("classpath:application.properties")
public class AppConfig {
}

8. Annotations cho Spring Security

  • @Secured: Đánh dấu phương thức yêu cầu quyền truy cập đặc biệt.
@Secured("ROLE_ADMIN")
public void deleteUser(Long id) {
    userService.delete(id);
}

@PreAuthorize: Cung cấp quyền truy cập chi tiết hơn.

@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(Long id) {
    userService.delete(id);
}

Các annotations trong Spring Boot rất phong phú và đa dạng, phục vụ cho nhiều mục đích khác nhau từ việc cấu hình ứng dụng, xử lý request đến việc tối ưu hóa các yếu tố bảo mật và hiệu suất. Tùy thuộc vào nhu cầu cụ thể của bạn, bạn có thể áp dụng các annotations này trong các lớp và phương thức của ứng dụng Spring Boot. Chúc các bạn học tập và làm việc thật tốt nhé!

bbugtea

bbugtea

Là người yêu thích, tìm hiểu quy trình gia công hệ thống phần mền website. Câu tục ngữ yêu thích nhất: "CÓ CÔNG MÀI SẮT CÓ NGÀY NÊN KIM".

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *