2012-11-08 11 views
7

Tôi đã tạo một triển khai ApplicationContextInitializer để tải các thuộc tính từ một nguồn theo yêu cầu (ZooKeeper) và thêm chúng vào danh sách nguồn thuộc tính của ApplicationContext.ApplicationContextInitializer trong một bối cảnh mùa xuân không web?

Tất cả tài liệu tôi có thể tìm thấy liên quan đến ứng dụng web mùa xuân, nhưng tôi muốn sử dụng tài liệu này trong ứng dụng nhắn tin độc lập.

Cách tiếp cận đúng để khởi tạo triển khai của tôi, tạo ngữ cảnh, sau đó chuyển ngữ cảnh đến triển khai của tôi 'thủ công'? Hoặc tôi thiếu một số tính năng tự động cho khuôn khổ mà sẽ áp dụng initializer của tôi vào bối cảnh của tôi?

Trả lời

8

Tôi đã tìm thấy nó đủ đơn giản để thực hiện chiến lược của SpringMVC để khởi tạo ngữ cảnh bằng cách khởi tạo với một ngữ cảnh trống. Trong các bối cảnh ứng dụng bình thường, không có gì sử dụng một ApplicationContextInitializer, do đó bạn phải thực thi nó một mình.

Không có vấn đề, mặc dù kể từ khi trong một ứng dụng J2SE bình thường cho bạn có quyền sở hữu khối tải ngữ cảnh, bạn sẽ có quyền truy cập vào mọi giai đoạn của vòng đời.

// Create context, but dont initialize with configuration by calling 
// the empty constructor. Instead, initialize it with the Context Initializer. 
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
MyAppContextInitializer initializer = new MyAppContextInitializer(); 
initializer.initialize(ctx); 

// Now register with your standard context 
ctx.register(com.my.classpath.StackOverflowConfiguration.class); 
ctx.refresh() 

// Get Beans as normal (e.g. Spring Batch) 
JobLauncher launcher = context.getBean(JobLauncher.class); 

Tôi hy vọng điều này sẽ hữu ích!

0

Không chắc về các phiên bản khác, nhưng trong mùa xuân 4:

AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(yourConfig.class);