2010-08-04 30 views
14

Tôi có một phương thức trong một chương trình java phức tạp cần được gọi ngay sau khi ApplicationContext và SpringBeans đã được khởi tạo.Gọi phương thức Sau khi tất cả SpringBeans và ApplicationContext đã được khởi tạo

Tôi đã thử đồ chơi xung quanh với <bean id="..." class="..." init-method="initialize"> nhưng phương pháp này sẽ gọi phương thức applicationContext.get().getBean(beanId);.

Tôi đã tự hỏi liệu có ai biết cách thực hiện việc này không.

Cảm ơn bạn.

Trả lời

2

Bạn có thể thêm tùy chỉnh BeanFactoryPostProcessor có quyền truy cập vào bean được đề cập.

+0

Không BeanFactoryPostProcessor thực thi * trước khi * tất cả các hạt đã được khởi tạo? – AJPerez

11

Vào mùa xuân 4.2 trở đi, bạn có thể đính kèm trình xử lý sự kiện vào sự kiện Springs Lifecycle (và của riêng bạn) bằng cách sử dụng chú thích. Đơn giản thêm @EventListener vào một phương thức và bao gồm kiểu sự kiện làm tham số đầu tiên (và duy nhất) và Spring sẽ tự động phát hiện nó và nối nó lên.

https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2

@Component 
public class MyListener { 

    @EventListener 
    public void handleContextRefresh(ContextRefreshedEvent event) { 
     ... 
    } 
} 
+0

Dễ dàng hơn việc tạo một hạt đậu – Aakash

3

Bạn có thể sử dụng ApplicationListener<E> cho mục đích này. Trong thông số kiểu chung, bạn có thể sử dụng ContextRefreshedEvent cho yêu cầu của mình. Và lưu ý rằng, trong phương pháp ghi đè onApplicationEvent bạn có thể làm bất cứ điều gì giống như autowire một bean hoặc sử dụng nó như một dịch vụ hoặc gọi một dịch vụ khác từ đây. Và lưu ý rằng sự khác biệt của nó từ @PostConstructor

public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> { 

    @Override 
    public void onApplicationEvent(ContextRefreshedEvent event) { 
     //do what you want 
    } 
} 
Các vấn đề liên quan