Hướng dẫn sử dụng @Autowired trong Spring (phần 1)
NỘI DUNG BÀI VIẾT
1. Tổng quan
Bắt đầu với Spring 2.5, framework đã giới thiệu tính năng Dependency Injection theo hướng chú thích. Chú thích chính của tính năng này là @Autowired. Nó cho phép Spring resolve và inject các collaborating beans vào bean của chúng ta.
Tham Khảo thêm: Lập trình Front-end và Back-end là gì?
Trong hướng dẫn này, trước tiên chúng ta sẽ xem xét cách kích hoạt tính năng autowiring và các cách khác nhau để autowire bean. Sau đó, chúng ta sẽ nói về việc giải quyết xung đột bean bằng cách sử dụng chú thích @Qualifier, cũng như các trường hợp ngoại lệ tiềm năng.
2. Enabling @Autowired Annotations
Framework Spring cho phép tự động tiêm phụ thuộc. Nói cách khác bằng cách khai báo tất cả các phụ thuộc bean trong tệp cấu hình Spring. Spring container có thể tự động truyền tải các mối quan hệ giữa các collaborating beans . Điều này được gọi là Autowired Spring Bean.
Để sử dụng cấu hình dựa trên Java trong ứng dụng, hãy bật tính năng tiêm theo hướng chú thích để tải cấu hình Spring:
@Configuration
@ComponentScan("com.baeldung.autowire.sample")
public class AppConfig {}
Code language: PHP (php)
Ngoài ra, chú thích <context: annotation-config> chủ yếu được sử dụng để kích hoạt chú thích chèn phụ thuộc trong tệp Spring XML.
Hơn nữa, Spring Boot giới thiệu chú thích @SpringBootApplication. Chú thích đơn này tương đương với việc sử dụng @Configuration, @EnableAutoConfiguration và @ComponentScan.
Hãy sử dụng chú thích này trong lớp chính của ứng dụng:
@SpringBootApplication
class VehicleFactoryApplication {
public static void main(String[] args) {
SpringApplication.run(VehicleFactoryApplication.class, args);
}
}
Code language: JavaScript (javascript)
Kết quả là khi chúng ta chạy ứng dụng Spring Boot này, nó sẽ tự động quét các thành phần trong gói hiện tại và các gói con của nó. Do đó, nó sẽ đăng ký chúng trong Application Context của Spring và cho phép chúng tôi đưa các bean bằng @Autowired.
3. Sử dụng @Autowired
Sau khi bật tính năng chèn chú thích, chúng ta có thể sử dụng tính năng tự động nạp vào thuộc tính, bộ thiết lập và hàm tạo.
3.1. @Autowired trong Properties
Hãy xem cách tôi có thể chú thích một sản phẩm bằng @Autowired. Điều này giúp loại bỏ nhu cầu về getters và setters.
Đầu tiên, hãy xác định một bean fooFormatter:
@Component("fooFormatter")
public class FooFormatter {
public String format() {
return "foo";
}
}
Code language: PHP (php)
Sau đó, chúng tôi sẽ đưa bean này vào bean FooService bằng cách sử dụng @ Autowired về định nghĩa trường:
@Component
public class FooService {
@Autowired
private FooFormatter fooFormatter;
}
Code language: CSS (css)
Kết quả là Spring đưa fooFormatter vào khi FooService được tạo.
3.2. @Autowired trong Setters
Bây giờ, hãy thử thêm chú thích @Autowired mong muốn trên một phương thức setter.
Trong ví dụ sau, phương thức setter được gọi với phiên bản FooFormatter khi FooService được tạo:
public class FooService {
private FooFormatter fooFormatter;
@Autowired
public void setFooFormatter(FooFormatter fooFormatter) {
this.fooFormatter = fooFormatter;
}
}
Code language: PHP (php)
3.3. @Autowired trong Constructors
Cuối cùng, hãy sử dụng @ Autowired trên một phương thức khởi tạo.
Chúng ta sẽ thấy rằng một phiên bản của FooFormatter được Spring đưa vào làm đối số cho hàm tạo FooService.
public class FooService {
private FooFormatter fooFormatter;
@Autowired
public FooService(FooFormatter fooFormatter) {
this.fooFormatter = fooFormatter;
}
}
Code language: PHP (php)
Happy learning!!!
Leave a Reply