我有一个控制器(Scoped:session),一个自动服务(Scoped:session)和一个服务使用的组件(“A”)(Scoped:request)。
每个请求的流程预计如下:
1) Request Arrives at Controller
2) Controller has an injected service whose method is called
3) Service has an injected component A, and the method of that is called has
a custom PreAuthorize expression evaluating a boolean returned by the
method of the injected component A.
4) In successful PreAuthorize (doesn't throw access denied and it goes ahead)
I populate a member variable of bean A.
5) The service method is executed which uses bean A's set member variables'
value.
每次发出请求时,我都会得到成员变量的值相同。基本上,它是第一次请求时的值。我在每个PreAuthorize上更改它...如果我调试并看到发生了什么,它确实会被更改,但是当我在组件自动装配的服务上访问bean时,我得到旧值。
所以我在服务中为bean A(请求作用域)打印了object.toString。我应该在每个新请求上得到不同的值。但我一直都有同样的价值。
我做错了什么?对于请求作用域的组件,这是标准/正确的行为吗?
以下方案完美无缺,因为我得到了更改的值,因为我在同一个会话作用域的对象中得到了更新的值:
Controller(Scoped:session),Service(Scoped:session),Component(Scoped:session)..
修改 同样,如果所有3都是作用域请求,我会得到不同的bean的toString值。
编辑2 稍微考虑一下,是否返回相同的Component bean,因为它是Session作用域服务/控制器的成员?我尝试了Controller(会话),服务(请求)和组件(请求),并在会话中获得了与自动装配组件相同的object.toString。 PreAuthorize访问正确的bean,因为它没有访问自动连接到服务的实例。
那么,当我说时,我是正确的,将请求范围的bean自动连接到会话作用域控制器(“较大”范围内的“较小”范围)是不正确的吗?