繁体   English   中英

Spring 如何自动装配会话作用域 bean?

[英]How does Spring autowire session scoped beans?

我目前正在处理会话对象。 在服务层,我正在自动装配会话范围的 bean。 我想知道 Spring 是如何做到这一点的? 更有趣的部分是,即使我使用 final 关键字并使用构造函数注入,Spring 仍然能够自动装配对象。

@Service
public class SomeServiceImpl implements SomeService {

    private final UserSessionDetails userSessionDetails;

    @Autowired
    public SomeServiceImpl(final UserSessionDetails userSessionDetails) {
        this.userSessionDetails = userSessionDetails;
    }
}

我的另一个问题是; 在服务层使用会话对象是个好习惯吗? 或者我可以在控制器和服务层自由使用这些对象吗?

我想知道 Spring 是如何做到这一点的?

SomeServiceImpl是一个单例,所以它应该在启动时组装。 组装一个 bean 意味着向它注入所有必需的依赖项。 尽管某些候选对象的作用域可能与单例作用域不同,但仍然必须提供它们。 对于此类 bean,Spring 创建代理。 在某些上下文出现之前,代理基本上是一个无意义的包装器。

如果我使用 final 关键字并使用构造函数注入,Spring 仍然能够自动装配对象。

Spring 支持基于构造函数的注入。 它检查签名并查找要注入的候选对象; 字段的修饰符无关紧要。

在服务层使用会话对象是个好习惯吗? 或者我可以在控制器和服务层自由使用这些对象吗?

只要服务是面向 Web 的并且关注会话的,您就可以自由地向它注入会话范围的 bean。

您是通过构造函数自动装配的,因此在这种情况下,单词final的使用不会改变任何内容。 通过将UserSessionDetails注释为会话作用域 bean,并将其注入SomeServiceImpl spring 生成代理。 来自您的服务的任何调用都被委托给UserSessionDetails bean。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM