Tôi có một lớp giống như vậy:mùa xuân tiêm tĩnh (toàn cầu) singleton
public class Configurator {
private static Configurator INSTANCE = null;
private int maxRange = 1;
// many other properties; each property has a default value
private static synchronized Configurator getInstance() {
if(INSTANCE == null)
return new Configurator();
return INSTANCE;
}
public static int getMaxRange() {
getInstance().maxRange;
}
public static void setMaxRange(int range) {
getInstance().maxRange = range;
}
// Getters and setters for all properties follow this pattern
}
Nó đóng vai trò như một đối tượng cấu hình toàn cầu có thể được thiết lập khi khởi động ứng dụng, và sau đó được sử dụng bởi hàng chục lớp học trong suốt dự án:
// Called at app startup to configure everything
public class AppRunner {
Configurator.setMaxRange(30);
}
// Example of Configurator being used by another class
public class WidgetFactory {
public void doSomething() {
if(Configurator.getMaxRange() < 50)
// do A
else
// do B
}
}
Tôi hiện đang nhập mã này vào một dự án Spring và đang cố định cấu hình XML Sprinig của tôi (đậu). tôi đoán là tôi có thể xác định một Configurator
đậu duy nhất như vậy (hoặc một cái gì đó tương tự):
<bean id="configurator" class="com.me.myapp.Configurator" scope="singleton">
<property name="maxRange" value="30"/>
<!-- etc., for all properties -->
</bean>
Bằng cách đó, khi WidgetFactory#doSomething
thực thi, mùa xuân sẽ có đã nạp lớp Configurator
và cấu hình nó trước thời hạn.
Tôi có đặt đúng số scope="singleton"
hoặc điều này không quan trọng? Tôi có thiết lập các thuộc tính tĩnh một cách chính xác không? Có điều gì khác tôi cần làm hay cân nhắc ở đây không? Cảm ơn trước.
Cảm ơn @partlov (+1) - tôi có cần phải đặt phương thức 'getInstance()' của mình thành công khai, hoặc Spring có thể xử lý thực tế là nó là riêng tư? –
Bạn không cần nó (getInstance()) –