sar*_*hdi 12 spring annotations dependency-injection autowired
在我的应用程序中,我使用自动连接User到我的服务的bean,MyService并将其用作登录用户信息的原则(因此用户不是从xml作为静态bean而是从登录用户动态生成)如果有登录的十个用户我将有十个该@AutoWired User领域的候选人.(对吗?)我可以在Spring容器中找到其中任何一个cos AutoWired,而不是会话.
告诉我,如果我错了.以及如果可能的话如何实际解决它.但是如果我的AutoWired字段被注释了怎么办呢@Scope ("Session")
像这样 :
@Component("user")
@Scope("session")
public class User
{
String userid;
String name;
//getter setters etc
}
Run Code Online (Sandbox Code Playgroud)
@Component
public class MyService
{
@Autowired
private User user;
}
Run Code Online (Sandbox Code Playgroud)
当我调用MyServiceComponent 时,是否可以获取其他用户的User bean .Cos MyService只是@Component即使它User是@Scope(session).
基本上,(如果我的假设是错的)我认为当你@Autowire是一个字段时,它会将容器视为整体并且容器不会被分成每个会话的子容器.
ska*_*man 15
当您使用User,@Scope("session")然后将@Autowire其注释到另一个非范围组件时,Spring将生成一个位于MyService和之间的代理User.此代理将从User当前会话中找到该代理,并将任何来自MyService代理的调用委派给会话范围User.
所以它非常安全,MyService组件只能访问User当前会话.
如果代理未发生,则容器将无法启动,因为您无法直接将会话范围的bean注入到单例范围的bean中.
pra*_*ant 14
Spring不会自动创建代理.您需要将范围注释更改为以下内容
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
Run Code Online (Sandbox Code Playgroud)
这将确保当会话bean在单例类中进行自动装配时,将围绕bean创建一个代理,该代理负责从会话中获取bean.
| 归档时间: |
|
| 查看次数: |
9885 次 |
| 最近记录: |