当前位置: 首页 > 知识库问答 >
问题:

在控制器中管理Facebook对象

邵弘致
2023-03-14

这是一个更通用的Spring问题,不一定是Spring社交脸谱网的问题;然而,我在这里问这个问题,因为我不清楚Spring是如何管理传递到控制器构造函数的脸谱网引用的。

我在Spring boot应用程序1.5.3版中运行这个。释放

我在谷歌上搜索过,读过很多关于作用域代理如何工作以及控制器是否为单例等的内容;但是对于这个特定的用例,我仍然不清楚。我担心的是,两个或两个以上的同时请求是否会导致一个引用干扰另一个引用。在我看来,无论采用何种范围代理解决方案,都会出现冲突。为了解决这个问题,我将一个Facebook和ConnectionRepository对象注入到封装在提供者类中的控制器构造函数中。

@Inject
public CopyGroupController(
        Provider<Facebook> facebook, 
        Provider<ConnectionRepository> connectionRepository) {

它似乎注入了有意义的数据;但是当试图运行此代码时:

@PostConstruct
public void init() {
    ConnectionRepository repo = connectionRepository.get();
    this.userManager.createOrGetUser(
            repo.findPrimaryConnection(Facebook.class));

}

出现此故障:

java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

这带来了更多的不确定性,因为我认为FacebookTemplate是作为请求或会话范围的bean进行管理的,它将作为提供者进行注入,以便对象驻留在ThreadLocale上;因此,两个或多个并发请求不会冲突。在控制器单例构造函数中传递请求范围的bean对我来说也没有任何意义。所以我很困惑,为什么特定于用户的引用甚至会被传递到一个只应该调用一次的构造函数中。

我尝试在构造函数中设置断点,以验证是否存在冲突;但同样的错误也会发生。请有人向我解释一下这是否是一个问题,如果是的话;如何解决这个问题是最好、最现代的方法。

如蒙协助,不胜感激。提前谢谢你。

共有1个答案

艾茂学
2023-03-14

您必须注册RequestContextListener

在这里你可以找到问题的细节

在这里,您可以了解如何使用spring boot添加

 类似资料:
  • 英文原文:http://emberjs.com/guides/controllers/dependencies-between-controllers/ 有时候,特别是在嵌套资源时,可能需要为两个控制器建立某种联系。以下面的路由为例: 1 2 3 4 5 App.Router.map(function() { this.resource("post", { path: "/posts/:po

  • 还有其他人知道如何解决这个问题吗?

  • 插件后台管理控制器 在插件类主文件里加hasAdmin为1的属性; 默认后台管理控制器AdminIndex,默认方法index,不可更改 cmf_get_current_admin_id();可获取后台管理员id,可用于判断是否登录 在插件controller目录下创建AdminIndexController.php文件,内容如下: <?php // +----------------------

  • 在插件类主文件里加has_admin为1的属性; 默认后台管理控制器AdminIndex,默认方法index,不可更改 sp_get_current_admin_id();可获取后台管理员id,可用于判断是否登录 <?php namespace plugins\Demo\Controller; //Demo插件英文名,改成你的插件英文就行了 use Api\Controller\PluginCon

  • 插件后台管理控制器 在插件类主文件里加hasAdmin为1的属性; 默认后台管理控制器AdminIndex,默认方法index,不可更改 cmf_get_current_admin_id();可获取后台管理员id,可用于判断是否登录 在插件controller目录下创建AdminIndexController.php文件,内容如下: <?php // +----------------------

  • 此任务将演示如何通过配置Istio将服务发布到service mesh集群外部。在Kubernetes环境中,Kubernetes Ingress Resources 允许用户指定某个服务是否要公开到集群外部。然而,Ingress Resource规范非常精简,只允许用户设置主机,路径,以及后端服务。下面是Istio ingress已知的局限: Istio支持不使用annotation的标准Kub