Do kiến trúc trình cắm thêm, tôi đang cố gắng thêm bean lập trình vào webapp của tôi. Tôi có một bean Spring được tạo thông qua chú thích @Component
và tôi đang triển khai giao diện ApplicationContextAware
.Thêm Bean theo cách lập trình vào ngữ cảnh ứng dụng web mùa xuân
chức năng ghi đè lên tôi trông như thế này:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
Về cơ bản, tôi không thể tìm ra cách để thêm một bean đến đối tượng applicationContext trao cho setApplicationContext. Bất cứ ai có thể cho tôi biết làm thế nào tôi đang đi về điều này một cách sai lầm?
Ok, đây là những gì tôi đã kết thúc với là giải pháp:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
cảm ơn bạn. tôi đoán phần khó nhất là biết phải tìm gì. – user146714
Hãy chú ý rằng theo [JavaDoc] (http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/beans/factory/config/BeanPostProcessor.html): 'Một BeanFactoryPostProcessor có thể tương tác với và sửa đổi các định nghĩa bean, nhưng không bao giờ các cá thể đậu. Làm như vậy có thể gây ra hiện tượng đậu sớm, vi phạm vật chứa và gây ra các tác dụng phụ không mong muốn. Nếu cần tương tác với cá thể bean, hãy xem xét việc triển khai BeanPostProcessor thay thế.' – dgiffone
Phải làm gì với 'BeanDefinitionRegistryPostProcessor'? Giả sử tôi đã viết lớp này. Tiếp theo là gì? Làm thế nào để kích hoạt nó? – Dims