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

将HttpServletRequest注入控制器

傅英喆
2023-03-14
@Controller("CMSProductComponentController")
@RequestMapping(CMSProductComponentController.CONTROLLER_PATH)
public class CMSProductComponentController {
    @Autowired
    private HttpServletRequest request;
}

共有1个答案

琴宾鸿
2023-03-14

不,对于HttpServletRequest来说,这不会是问题,对于其他请求范围的bean来说也不应该是问题。基本上,Spring将生成一个代理HttpServletRequest,它包装某种ObjectFactory(HttpServletRequestRequestObjectFactory)(YMMV),知道如何检索实际实例。当您使用此代理的任何方法时,它们将委托给该实例。

更重要的是,这是懒洋洋地完成的,所以不会在初始化时失败。但是,如果您在没有可用请求时尝试使用bean(或者您没有注册requestscope),它将失败。

以下是对评论意见的答复和一般性澄清。

当与非单例作用域实例一起使用时,这种代理模式通常是不有用的,如果要将其用作依赖项,则应该支持使用INTERFACES或TARGET_CLASS代理模式。

对于请求范围的bean,这个proxy-mode值将不起作用。根据需要的配置,您需要使用接口target_class

如果scope设置为request(使用常量webapplicathtml" target="_blank">ioncontext.scope_request),Spring将使用requestscope

@Component
@Scope(proxyMode = ScopedProxyMode.INTERFACES, value = WebApplicationContext.SCOPE_REQUEST)
public class RequestScopedBean {
    public void method() {}
}
...
@Autowired
private RequestScopedBean bean;

Spring将生成两个bean定义:一个用于注入的bean,一个singleton,一个用于在每个请求上生成的请求范围bean。

根据这些bean定义,Spring将用目标类的类型初始化singleton作为代理。在本例中,这就是requestscopedbean。代理将包含在需要时生成或返回实际bean所需的状态,即。在代理上调用方法时。例如,当

bean.method();

叫做。

 类似资料:
  • 问题内容: 我正在使用ejb 3并尝试@Inject HttpServletRequest,但是在部署时发生异常。 码: 例外: 我该怎么办? 问题答案: HttpServletRequest的生命周期由EJB / Web容器而不是CDI容器管理。尝试注入它会导致问题,因为通常会有很多接口实现,并且您的CDI容器没有足够的信息来决定要注入哪种实现。即使您成功注入了它的实例,它也 不会 与EJB容器

  • 在spring mvc项目中,我想将@控制器注入到另一个bean中,如下所示: 这似乎不起作用,尽管@控制器注释是@组件的一种专门化,就像@服务(确实起作用)一样: 我还尝试直接从Application Context获取bean。 我希望避免讨论我为什么要注入控制器,以及我应该创建一个额外的抽象级别并注入它:)

  • 问题内容: 我已经用AngularJS编写了一个服务,但是我无法使其与角度种子处理方式一起使用。 控制器代码如下: 请注意,注释掉的部分工作正常,但我想像(推荐的)第二种方式来处理它。 我得到的错误是照片是未定义的,所以我的猜测是我传递(注入)它的方法是错误的,但是我找不到正确的方法 问题答案: 您需要定义服务: 一些参考: http://docs.angularjs.org/api/angula

  • 将服务用作控制器的依赖和将服务用作其他服务的依赖很类似。 因为Javascript是一种动态语言,依赖注入系统无法通过静态类型来知道应该注入什么样的服务(静态类型语言就可以)。所以,你应该$inject的属性来指定服务的名字,这个属性是一个包含这需要注入的服务的名字字符串的数组。名字要和服务注册到系统时的名字匹配。服务的名称的顺序也很重要:当执行工场函数时传递的参数是依照数组里的顺序的。但是工场函

  • CDI到达以执行类的构造函数。但是,请求字段未初始化(注入)。 我做错了什么?

  • 问题内容: 我已经尽一切努力让ui路由器解析将其值传递给给定的控制器AppCtrl。我正在使用依赖注入,这似乎引起了问题。我想念什么? 路由 控制者 编辑 这是一个小家伙http://plnkr.co/edit/PoCiEnh64hR4XM24aH33?p=preview 问题答案: 在将路由解析参数用作绑定到该路由的控制器中的依赖项注入时,由于名称不存在的服务提供程序,因此不能将该控制器与ng-