Trong ứng dụng của tôi Tôi đang sử dụng một hạt User
được Tự động dịch vụ MyService
và được sử dụng làm nguyên tắc đăng nhập vào thông tin của người dùng (Vì vậy, người dùng không đến như một hạt tĩnh từ một xml nhưng được tạo động từ người dùng đã đăng nhập) Nếu có mười người dùng đã đăng nhập, tôi sẽ có mười ứng cử viên cho trường @AutoWired
User
. (phải không?) và tôi có thể nhận được bất kỳ một trong số họ cos AutoWired trông trong thùng chứa mùa xuân và không phiên.Spring @Autowired confused (vùng chứa hoặc phiên)
cho tôi biết nếu tôi sai về vấn đề này. và cách thực sự giải quyết nó nếu có thể. Nhưng nếu lĩnh vực AutoWired tôi được chú thích với @Scope ("Session")
Như thế này:
@Component("user")
@Scope("session")
public class User
{
String userid;
String name;
//getter setters etc
}
@Component
public class MyService
{
@Autowired
private User user;
}
Có thể lấy đậu tài khoản của một số người dùng khác khi tôi gọi MyService
phần của tôi. Cos MyService
chỉ là @Component
mặc dù User
là @Scope(session)
.
Về cơ bản, (Nếu tôi sai trong giả định của tôi) Tôi nghĩ rằng khi bạn @Autowire
một trường, giao diện của nó nhìn vào vùng chứa như toàn bộ và vùng chứa không được chia thành các nhà chứa phụ trên mỗi phiên.
Vì vậy, không thể khi tôi thực hiện 'SpringUtils.getContext (req) .getBean (" myservice ")', tôi sẽ nhận được một số bean người dùng khác không có trong phiên hiện tại. – sarmahdi
@sarmahdi: Đúng vậy. Phiên của người dùng hiện tại là biến chủ đề cục bộ được Spring duy trì. – skaffman
Vì vậy, nó không thể khi tôi làm một 'SpringUtils.getContext (req) .getBean (" myservice ")', tôi sẽ nhận được một số bean người dùng khác không có trong phiên hiện tại. Thực ra tôi gặp vấn đề này khi tôi tải một trang và tôi có một số chi tiết người dùng khác. Vì vậy, tôi đã nghĩ rằng nó có thể là cos ngay cả khi người dùng là phiên scoped dịch vụ không phải là và không scoped là mặc định singelton. – sarmahdi