Cách chính xác để sử dụng các hạt của nhà máy ở các lớp @Configuration
là gì?Mùa xuân - sử dụng các hạt của nhà máy trong cấu hình?
Giả sử tôi có sau đây cho SessionFactory
:
@Bean
public AnnotationSessionFactoryBean sessionFactory() {
AnnotationSessionFactoryBean factory = new AnnotationSessionFactoryBean();
// set up properties etc.
return factory;
}
Ngay bây giờ phương pháp này trả về một bean factory mà không thực hiện SessionFactory
. Nếu tôi sử dụng nó trong một hạt đậu với @Autowired
như SessionFactory
, nó hoạt động tốt và có được nó từ bean factory:
@Controller
public class MyController {
@Autowired SessionFactory sessionFactory;
// ...
}
Tôi đoán đó là OK.
Tuy nhiên, nó sẽ trở thành một vấn đề nếu tôi muốn sử dụng SessionFactory
trong lớp cấu hình giống nhau:
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager man = new HibernateTransactionManager();
// Ideal - doesn't work because sessionFactory() return type doesn't match:
// SessionFactory sessionFactory = sessionFactory();
// Is this one correct?
// SessionFactory sessionFactory = (SessionFactory) sessionFactory().getObject();
man.setSessionFactory(sessionFactory);
return man;
}
The Right Way để thực hiện hình thức này phụ thuộc là gì?
Không nó đòi hỏi afterPropertiesSet()? –
Không, Mùa xuân đủ thông minh để thực hiện tất cả các yêu cầu khởi tạo sau khi gọi phương thức '@ Bean' và trước khi trả lại chính bean. Vì vậy, 'InitializingBean',' DisposableBean', '@ PostConstruct', vv đều được nhận diện và xử lý đúng cách. Trong thực tế, tôi luôn tìm cách gọi 'afterPropertiesSet' một chút hack, bởi vì nó là trách nhiệm của container. –
Ngoài ra, xem chỉnh sửa của tôi, tôi đã tìm thấy một giải pháp khác. –