Sau khi ứng dụng của tôi hoàn tất, tôi muốn đóng bối cảnh mùa xuân.
Mã liên quan có ApplicationContext
tham chiếu nhưng tôi không thể tìm thấy close
phương pháp.
Sau khi ứng dụng của tôi hoàn tất, tôi muốn đóng bối cảnh mùa xuân.
Mã liên quan có ApplicationContext
tham chiếu nhưng tôi không thể tìm thấy close
phương pháp.
Câu trả lời:
Downcast của bạn ApplicationContext
đến phương thức ConfigurableApplicationContext
xác định close()
:
((ConfigurableApplicationContext)appCtx).close();
AbstractApplicationContext
là một lớp và ConfigurableApplicationContext
là một giao diện được triển khai bởi lớp đó, có lẽ tốt hơn là sử dụng cái sau trong hầu hết các trường hợp.
ConfigurableApplicationContext
bây giờ mở rộng Closable
(không biết phiên bản thay đổi này được thực hiện, nhưng tài liệu cho 4.2.x hiển thị nó trong khi 3.0.x không) một phiên bản ngắn hơn nhiều ((Closable)context).close();
.
AutoCloseable
thực hiện, có nghĩa là một thử-với-nguồn lực bây giờ có thể được sử dụng, miễn là bạn lưu trữ nội dung của bạn trong một biến nơi AutoCloseable
giao diện có thể nhìn thấy, tức làtry (ConfigurableApplicationContext context = new ....) { /* your code goes here */ } // context is closed when you leave the try block
Bạn cần đăng ký một hook tắt với JVM như hình dưới đây:
((AbstractApplicationContext)appCtx).registerShutdownHook();
Để biết thêm thông tin, hãy xem: Hướng dẫn sử dụng Spring: 3.6.1.6 Tắt hộp chứa Spring IoC một cách duyên dáng trong các ứng dụng không phải web
Nếu bạn khởi tạo ngữ cảnh như bên dưới
ApplicationContext context = new ClassPathXmlApplicationContext(beansXML);
bối cảnh sạch sẽ như thế này
((ClassPathXmlApplicationContext) context).close();
Nếu Java SE 7 trở lên , không đóng, hãy sử dụng thử với tài nguyên để đảm bảo rằng mỗi tài nguyên được đóng ở cuối câu lệnh.
try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"classpath*:META-INF/spring/*.xml" }))
{
//write your code
}
Các bước để đóng ApplicationContext
Đối tượng
ApplicationContext
đối tượng sang ConfigurableApplicationContext
đối tượng.thí dụ:
ApplicationContext context = new ClassPathXmlApplicationContext("mybeans.xml");
((ConfigurableApplicationContext)context ).close();
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("SpringCnf.xml");
Resturant rstro1=(Resturant)context.getBean("resturantBean");
rstro1.setWelcome("hello user");
rstro1.welcomeNote();
((ClassPathXmlApplicationContext) context).close();
AbstractApplicationContext