Tôi có một loạt các hằng số trong suốt mã của tôi cho các thuộc tính có thể điều chỉnh khác nhau của hệ thống của tôi. Tôi đang di chuyển tất cả chúng đến một tệp trung tâm .properties
. Giải pháp hiện tại của tôi là phải có một đơn Properties.java
mà tĩnh tải file .properties
và thấy nhiều phương pháp getter khác nhau như thế này:Tiêm các hằng số thông qua Chú thích tùy chỉnh
public class Properties {
private static final String FILE_NAME = "myfile.properties";
private static final java.util.Properties props;
static {
InputStream in = Properties.class.getClassLoader().getResourceAsStream(
FILE_NAME);
props = new java.util.Properties();
try {
props.load(in);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static String getString(Class<?> cls, String key) {
return props.getProperty(cls.getName() + '.' + key);
}
public static int getInteger(Class<?> cls, String key) {
return Integer.parseInt(getString(cls, key));
}
public static double getDouble(Class<?> cls, String key) {
return Double.parseDouble(getString(cls, key));
}
}
Vấn đề duy nhất với điều đó là đối với mỗi hằng số mà tôi nhận được từ tập tin này, tôi có một số boilerplate:
private final static int MY_CONSTANT = Properties.getInteger(
ThisClass.class, "MY_CONSTANT");
Tôi không nghĩ rằng tôi muốn sử dụng Mùa xuân hoặc tương tự như vậy dường như thậm chí còn nhiều lò hơi hơn. Tôi đã hy vọng sử dụng chú thích tùy chỉnh để giải quyết vấn đề. Tôi đã tìm thấy this tutorial, nhưng tôi thực sự không thể phân loại cách lấy chức năng mà tôi muốn xử lý chú thích. Các tài liệu Java thậm chí còn ít hữu ích hơn. Điều này nên là một điều tôi có thể làm tại thời gian biên dịch, mặc dù. Tôi biết tên của lớp và lĩnh vực.
Những gì tôi đang suy nghĩ là một cái gì đó như thế này:
@MyAnnotation
private static final int MY_CONSTANT;
Bất cứ ai cũng biết làm thế nào tôi sẽ đi về việc này hoặc ít nhất là thực hành tốt nhất cho những gì tôi muốn làm gì?
Tại sao bạn cho rằng tải mã tấm nồi hơi của nó? wont thêm chú thích sẽ thêm vào nó? – SMA
Những thứ đó thực sự là hằng số? Hoặc nhiều hơn như các mục cấu hình? Nếu chúng là cấu hình, nó thực sự cần thiết để viết chúng như hằng số? Bởi vì công cụ sửa đổi 'final' sẽ mất đi ý nghĩa của nó (tôi thậm chí không chắc chắn rằng sự phản chiếu có thể gán một giá trị cho một trường' final'). Nếu chúng chỉ là cấu hình, thì tại sao bạn không sử dụng một khung cấu hình để giảm bớt công việc của bạn (như [commons-configuration] (https://commons.apache.org/proper/commons-configuration/) hoặc [typesafe's config] (https://github.com/typesafehub/config))? Nếu chúng là hằng số, tại sao cần phải có khả năng "sửa đổi" chúng trong mỗi lần chạy? –
Ngoài ra, bạn không đóng 'InputStream' trong khối' try-catch-finally' của bạn. Bạn nên thử và làm điều đó. –