Spring bean có hai scope quan trọng là singleton và prototype. Singleton bean là những bean được tạo ra vào thời điểm khởi tạo spring context. Bean này được tạo ra đúng một lần trong suốt thời gian hoạt động của application. Bất cứ khi nào có yêu cầu inject thì instance đã có của bean này sẽ được lôi ra sử dụng. Prototype bean là những bean được tạo ra bất cứ khi nào có yêu cầu inject. Khác với singleton bean, bạn sẽ có nhiều instance của prototype bean trong spring context.
Việc tạo instance của bean cũng tiêu tốn performance của application nhưng đó không phải là lý do chính. Singleton bean cũng đồng thời là stateless bean - Bean không có state ( Class không có instance field ). Những tác động của mỗi request lên bean sẽ không được bean ghi nhớ lại. Nếu stateless bean có state thì đó phải là shared state - Bất cứ request nào tác động đến bean cũng cần state này. Hầu hết web application của bạn sử dụng các stateless bean. Mô hình của bạn thường gồm các tầng action -> service -> dao -> session factory. Bạn chỉ sử dụng method mà object của mỗi tầng cung cấp, bạn chẳng làm thay đổi state nào cả. Bản thân object của mỗi tầng cũng đâu chứa state nào. Singleton cộng với stateless thì sẽ không gây ra các vấn đề về concurrency. Vì nhu cầu chung là sử dụng stateless nên mặc định spring bean là singleton.
Những prototype bean sẽ được sử dụng cho các stateful bean. Mỗi instance của bean sẽ được tạo ra cho một request. Do bean không dùng chung nên các tác động lên bean của mỗi request được giữ lại trong state của bean. Vì là new instance bean per request nên cũng sẽ không có vấn đề về concurrency.
hay
Trả lờiXóa