根据springsource
文档,每个
容器singleton
仅实例化一次作用域 bean 。
例如,我有一个单例范围的UserDetails
bean,其中包含
有关用户的信息。
在我的 main() 方法中:
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
UserDetails ud1 = (UserDetails)context.getBean("userDetails");
custA.setAddress("Address set by ud1");
System.out.println("Address : " + ud1.getAddress());
UserDetails ud2 = (UserDetails)context.getBean("userDetails");
System.out.println("Address : " + ud2.getAddress());
输出将是
Address set by ud1
Address set by ud1
因为 userDetails 是一个单例 bean,所以第二次检索 byud2
将给出与 ud1 相同的结果。
现在这是我的问题:
对于我的 Web 应用程序UserDetails
,我的dispatcher-servlet.xml.
<bean id="userDetails" class="com.mukund.DTO.UserDetails" />
第一个问题:单例范围也是 Web 应用程序的默认值吗?
如果是:
这个 bean 被自动装配到AccountService
和CustomerService
类中。
如果客户说在 CustomerService 类中将用户的名字clientA
设置为“UserA”,并在一段时间后从 AccountService 类中检索名字,
第二个问题:它是否获得与“UserA”作为名字的相同的 UserDetails 实例?
第三个问题:与此同时,如果另一个客户说clientB
试图在 AccountService 类中获取名字,它会得到“UserA”吗?
第四个问题: clientA、clientB 和其他人会共享同一个 UserDetails 实例吗?如果是:选择原型、请求或会话的范围。
我希望你明白我的意思。请向我解释有关 Web 应用程序的 spring bean 范围。
谢谢