Tôi tò mò về cách Spring injection xử lý các phương thức gọi với @Bean
chú thích. Nếu tôi đặt một @Bean
chú thích trên một phương thức và trả về một thể hiện, tôi hiểu rằng điều đó nói với spring tạo một bean bằng cách gọi phương thức và nhận thể hiện trả về. Tuy nhiên, đôi khi hạt đậu đó phải được sử dụng để nối các hạt đậu khác hoặc thiết lập mã khác. Cách thông thường được thực hiện là gọi @Bean
phương thức chú thích để lấy một thể hiện. Câu hỏi của tôi là, tại sao điều này không gây ra nhiều trường hợp đậu nổi xung quanh?
Ví dụ, hãy xem đoạn mã dưới đây (lấy từ một câu hỏi khác). Các entryPoint()
phương pháp được chú thích với @Bean
, vì vậy tôi sẽ tưởng tượng mùa xuân sẽ tạo ra một thể hiện mới của BasicAuthenticationEntryPoint
như một hạt đậu. Sau đó, chúng tôi gọi entryPoint()
lại trong khối cấu hình, nhưng có vẻ như entryPoint()
trả về cá thể bean và không được gọi nhiều lần (tôi đã thử ghi nhật ký và chỉ nhận được một mục nhập nhật ký). Có khả năng chúng ta có thể gọi entryPoint()
nhiều lần trong các phần khác của cấu hình và chúng ta sẽ luôn nhận được cùng một trường hợp. Sự hiểu biết của tôi về điều này có đúng không? Liệu mùa xuân có thực hiện một số viết lại kỳ diệu của các phương pháp được chú thích bằng@Bean
không?
@Bean
public BasicAuthenticationEntryPoint entryPoint() {
BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthEntryPoint.setRealmName("My Realm");
return basicAuthEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(entryPoint())
.and()
.authorizeUrls()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
và@Primary
).