Mở Đầu
Trong quá trình sử dụng Spring Framework để lập trình, đặc biệt là Spring Boot. Chắc hẳn các bạn đã gặp các Annotation (Chú thích) là điều khó tránh khỏi. Nó thường hay sử dụng để cung cấp thông tin dữ liệu cho đoạn source code Java của bạn.
Bài viết sau đây, mình xin giải thích và hướng dẫn sử dụng một số annotation thường gặp nhiều nhất.
Các kiến thức cần nắm
- Dependency Injection (DI) Là một design pattern, một cách code nhằm giảm sự phụ thuộc giữa các Object để tiện cho việc thay đổi hay mở rộng code sau này. Các Object nên phục thuộc vào các Abstract Class và thể hiện chi tiết của nó sẽ được Inject vào lúc runtime chương trình.
- Inversion of Control (IoC):→ Tuy nhiên khi có nhiều Dependency (>10) chúng ta phải tiêm (Injection) cho các denpendency này thì rất mất thời gian.→ Tưởng tượng một Class bản thân phải Inject cho hàng chục dependency thì rất mất thời gian.
- Thay vì cách khởi tạo các Object như cách thông thường thì ra đảo ngược lại chiều điều khiển để cho Spring tạo Object, quản lí bộ nhớ cho các Object thay việc của chúng ta. (ĐẢO NGƯỢC CHIỀU ĐIỀU KHIỂN)
- Spring Container là nơi chứa đựng tất cả các Bean.
Spring IOC Container
@Autowire
- Tự động nhúng các bean được Spring Container sinh ra vào các class được khai báo @Autowire (theo cơ chế Dependency Injection)→ Cơ chế khi Spring bắt đầu chạy nó sẽ quét qua các lớp có sử dụng annotation để tạo Bean.→ Đồng thời sẽ tìm kiếm xem trong các bean đó có khai báo @Autowire không, nó sẽ tìm kiếm các bean tương ứng để tiêm (Injection) vào bean đó.
- Sử dụng @Autowire với 3 trường hợp sau:
//Properties
@Service
public class UserService {
@Autowired
UserRepository userRepository;
@Autowired
FacebookUtil facebookUtil;
}
//Setter
@Service
public class User {
Private String name;
@Autowire
void setName(String name) {
this.name = name;
}
}
//Contructor
@Service
public class User {
private long id;
private String name;
@Autowire
void user(long id, String name) {
this.id = id;
this.name = name;
}
}
@Configuration
- Được sử dụng để chỉ ra rằng, Class khai báo sử dụng @Configuration sẽ khai báo một hoặc nhiều @Bean method trong class đó.→ Thông thường các Bean cấu hình trong dự án ta sẽ để trong các lớp configuration này. Ví dụ cấu hình Elasticsearch, Thymeleaf, đa ngôn ngữ,…
@Bean
- Đánh dấu trên method thông báo cho Spring, method đó sẽ sinh ra một bean và được quản lí bởi Spring Container.→ Tất cả các Method sử dụng annotation @Bean phải nằm trong class Configuration.
@Configuration
public class WebDriverConfig {
@Bean
public WebDriver Chrome() {
System.setProperty("webdriver.chrome.driver", "/Downloads/chromedriver_linux64/chromedriver");
return new ChromeDriver();
}
}
@ComponentScan
- Sử dụng annotation này để thông báo cho spring container rằng: “Phải biết vào các package nào trong dự án để quét các Annotation và tạo Bean.”