Bạn có thể sử dụng @ConfigurationProperties
để có giá trị từ application.properties
bị ràng buộc vào một hạt. Để làm như vậy bạn chú thích phương pháp @Bean
của bạn mà tạo ra đậu:
@Bean
@ConfigurationProperties
public BasicAuthAuthorizationInterceptor interceptor() {
return new BasicAuthAuthorizationInterceptor();
}
Là một phần của khởi động của đậu, bất kỳ tài sản trên BasicAuthAuthorizationInterceptor
sẽ được thiết lập dựa trên môi trường của ứng dụng. Ví dụ, nếu đây là lớp học của đậu của bạn:
public class BasicAuthAuthorizationInterceptor {
private Map<String, String> users = new HashMap<String, String>();
public Map<String, String> getUsers() {
return this.users;
}
}
Và đây là application.properties của bạn:
users.alice=alpha
users.bob=bravo
Sau đó, bản đồ users
sẽ được áp dụng với hai mục: alice:alpha
và bob:bravo
.
Dưới đây là một ứng dụng mẫu nhỏ mà đặt này tất cả cùng nhau:
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
public class Application {
public static void main(String[] args) throws Exception {
System.out.println(SpringApplication.run(Application.class, args)
.getBean(BasicAuthAuthorizationInterceptor.class).getUsers());
}
@Bean
@ConfigurationProperties
public BasicAuthAuthorizationInterceptor interceptor() {
return new BasicAuthAuthorizationInterceptor();
}
public static class BasicAuthAuthorizationInterceptor {
private Map<String, String> users = new HashMap<String, String>();
public Map<String, String> getUsers() {
return this.users;
}
}
}
Hãy nhìn vào các javadoc for ConfigurationProperties
để biết thêm thông tin về tùy chọn cấu hình khác nhau của nó. Ví dụ, bạn có thể thiết lập một tiền tố để phân chia cấu hình của bạn thành một số không gian tên khác nhau:
@ConfigurationProperties(prefix="foo")
Đối với các ràng buộc để làm việc, sau đó bạn sẽ phải sử dụng tiền tố giống nhau trên các thuộc tính khai báo trong ứng dụng.các thuộc tính:
foo.users.alice=alpha
foo.users.bob=bravo
Lưu ý rằng đậu của bạn nên có một getter để mùa xuân có thể cư trú trong các bản đồ và một lĩnh vực nào là không đủ. – MeysaM
@MeysaM Bạn đã đọc sai mã chưa? BasicAuthAuthorizationInterceptor đã có phương thức 'getUsers()' và trường 'users' là' private', không phải 'public'. –
Không, nó chỉ là một lời nhắc nhở cho mọi người khác không lặp lại sai lầm của tôi. Mã của bạn hoạt động hoàn toàn tốt. – MeysaM