HttpServletResponse bean injected into bean in mvc
In my spring-mvc project I have the following config:
@Configuration
class MyConfig{
@Bean
SomeBean someBean(HttpServletResponse response){
... set response into new bean instance...
}
}
SomeBean is got created only once, but response not.
Response has got request scope therefore we have classic Narrow scope bean problem.
But, in fact, SomeBean has got correct response field throughout mvc-app life(during multiple requests and responses, coming from a user.)
So, this field must have updated restlessly, but how can it be, taking into account SomeBean created only once!?
So, my question is how it is possible to have mutable response field ?
java spring
add a comment |
In my spring-mvc project I have the following config:
@Configuration
class MyConfig{
@Bean
SomeBean someBean(HttpServletResponse response){
... set response into new bean instance...
}
}
SomeBean is got created only once, but response not.
Response has got request scope therefore we have classic Narrow scope bean problem.
But, in fact, SomeBean has got correct response field throughout mvc-app life(during multiple requests and responses, coming from a user.)
So, this field must have updated restlessly, but how can it be, taking into account SomeBean created only once!?
So, my question is how it is possible to have mutable response field ?
java spring
Apart from the fact you shouldn't do this (IMHO). TheHttpServletResponse
is injected as a proxy and when needed the current activeHttpServletResponse
is obtain on the fly. That is the one bound to the current executing thread (it is basically request scoped). This has to be done else your application wouldn't even start as at the moment of starting there isn't an activeHttpServletResponse
.
– M. Deinum
Nov 20 '18 at 13:05
@M.Deinum i need to alter cookies in response, based on logic, conducted in SomeBean. So, i must inject response in it.
– voipp
Nov 20 '18 at 13:07
Then create a method that takes theHttpServletResponse
instead of relying it to be set in a scoped variable. This is more clear and direct now it is hidden and you possibly tie your whole application to the web (depending on where you call that functionality inSomeBean
).
– M. Deinum
Nov 20 '18 at 13:08
@M.Deinum if i create a method, that returns response won't it indicate web-related thing ? response itself is only related to web
– voipp
Nov 20 '18 at 13:26
If you use that classSomeBean
from a a repository or a service (which is doable right now because you are injecting things) your application is now fully tied to the web. Whereas if you use it as a method signature you would probably think twice in using this class from a service and only use it in the appropriate layer.
– M. Deinum
Nov 20 '18 at 13:27
add a comment |
In my spring-mvc project I have the following config:
@Configuration
class MyConfig{
@Bean
SomeBean someBean(HttpServletResponse response){
... set response into new bean instance...
}
}
SomeBean is got created only once, but response not.
Response has got request scope therefore we have classic Narrow scope bean problem.
But, in fact, SomeBean has got correct response field throughout mvc-app life(during multiple requests and responses, coming from a user.)
So, this field must have updated restlessly, but how can it be, taking into account SomeBean created only once!?
So, my question is how it is possible to have mutable response field ?
java spring
In my spring-mvc project I have the following config:
@Configuration
class MyConfig{
@Bean
SomeBean someBean(HttpServletResponse response){
... set response into new bean instance...
}
}
SomeBean is got created only once, but response not.
Response has got request scope therefore we have classic Narrow scope bean problem.
But, in fact, SomeBean has got correct response field throughout mvc-app life(during multiple requests and responses, coming from a user.)
So, this field must have updated restlessly, but how can it be, taking into account SomeBean created only once!?
So, my question is how it is possible to have mutable response field ?
java spring
java spring
asked Nov 20 '18 at 12:58
voippvoipp
18011
18011
Apart from the fact you shouldn't do this (IMHO). TheHttpServletResponse
is injected as a proxy and when needed the current activeHttpServletResponse
is obtain on the fly. That is the one bound to the current executing thread (it is basically request scoped). This has to be done else your application wouldn't even start as at the moment of starting there isn't an activeHttpServletResponse
.
– M. Deinum
Nov 20 '18 at 13:05
@M.Deinum i need to alter cookies in response, based on logic, conducted in SomeBean. So, i must inject response in it.
– voipp
Nov 20 '18 at 13:07
Then create a method that takes theHttpServletResponse
instead of relying it to be set in a scoped variable. This is more clear and direct now it is hidden and you possibly tie your whole application to the web (depending on where you call that functionality inSomeBean
).
– M. Deinum
Nov 20 '18 at 13:08
@M.Deinum if i create a method, that returns response won't it indicate web-related thing ? response itself is only related to web
– voipp
Nov 20 '18 at 13:26
If you use that classSomeBean
from a a repository or a service (which is doable right now because you are injecting things) your application is now fully tied to the web. Whereas if you use it as a method signature you would probably think twice in using this class from a service and only use it in the appropriate layer.
– M. Deinum
Nov 20 '18 at 13:27
add a comment |
Apart from the fact you shouldn't do this (IMHO). TheHttpServletResponse
is injected as a proxy and when needed the current activeHttpServletResponse
is obtain on the fly. That is the one bound to the current executing thread (it is basically request scoped). This has to be done else your application wouldn't even start as at the moment of starting there isn't an activeHttpServletResponse
.
– M. Deinum
Nov 20 '18 at 13:05
@M.Deinum i need to alter cookies in response, based on logic, conducted in SomeBean. So, i must inject response in it.
– voipp
Nov 20 '18 at 13:07
Then create a method that takes theHttpServletResponse
instead of relying it to be set in a scoped variable. This is more clear and direct now it is hidden and you possibly tie your whole application to the web (depending on where you call that functionality inSomeBean
).
– M. Deinum
Nov 20 '18 at 13:08
@M.Deinum if i create a method, that returns response won't it indicate web-related thing ? response itself is only related to web
– voipp
Nov 20 '18 at 13:26
If you use that classSomeBean
from a a repository or a service (which is doable right now because you are injecting things) your application is now fully tied to the web. Whereas if you use it as a method signature you would probably think twice in using this class from a service and only use it in the appropriate layer.
– M. Deinum
Nov 20 '18 at 13:27
Apart from the fact you shouldn't do this (IMHO). The
HttpServletResponse
is injected as a proxy and when needed the current active HttpServletResponse
is obtain on the fly. That is the one bound to the current executing thread (it is basically request scoped). This has to be done else your application wouldn't even start as at the moment of starting there isn't an active HttpServletResponse
.– M. Deinum
Nov 20 '18 at 13:05
Apart from the fact you shouldn't do this (IMHO). The
HttpServletResponse
is injected as a proxy and when needed the current active HttpServletResponse
is obtain on the fly. That is the one bound to the current executing thread (it is basically request scoped). This has to be done else your application wouldn't even start as at the moment of starting there isn't an active HttpServletResponse
.– M. Deinum
Nov 20 '18 at 13:05
@M.Deinum i need to alter cookies in response, based on logic, conducted in SomeBean. So, i must inject response in it.
– voipp
Nov 20 '18 at 13:07
@M.Deinum i need to alter cookies in response, based on logic, conducted in SomeBean. So, i must inject response in it.
– voipp
Nov 20 '18 at 13:07
Then create a method that takes the
HttpServletResponse
instead of relying it to be set in a scoped variable. This is more clear and direct now it is hidden and you possibly tie your whole application to the web (depending on where you call that functionality in SomeBean
).– M. Deinum
Nov 20 '18 at 13:08
Then create a method that takes the
HttpServletResponse
instead of relying it to be set in a scoped variable. This is more clear and direct now it is hidden and you possibly tie your whole application to the web (depending on where you call that functionality in SomeBean
).– M. Deinum
Nov 20 '18 at 13:08
@M.Deinum if i create a method, that returns response won't it indicate web-related thing ? response itself is only related to web
– voipp
Nov 20 '18 at 13:26
@M.Deinum if i create a method, that returns response won't it indicate web-related thing ? response itself is only related to web
– voipp
Nov 20 '18 at 13:26
If you use that class
SomeBean
from a a repository or a service (which is doable right now because you are injecting things) your application is now fully tied to the web. Whereas if you use it as a method signature you would probably think twice in using this class from a service and only use it in the appropriate layer.– M. Deinum
Nov 20 '18 at 13:27
If you use that class
SomeBean
from a a repository or a service (which is doable right now because you are injecting things) your application is now fully tied to the web. Whereas if you use it as a method signature you would probably think twice in using this class from a service and only use it in the appropriate layer.– M. Deinum
Nov 20 '18 at 13:27
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53393519%2fhttpservletresponse-bean-injected-into-bean-in-mvc%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53393519%2fhttpservletresponse-bean-injected-into-bean-in-mvc%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Apart from the fact you shouldn't do this (IMHO). The
HttpServletResponse
is injected as a proxy and when needed the current activeHttpServletResponse
is obtain on the fly. That is the one bound to the current executing thread (it is basically request scoped). This has to be done else your application wouldn't even start as at the moment of starting there isn't an activeHttpServletResponse
.– M. Deinum
Nov 20 '18 at 13:05
@M.Deinum i need to alter cookies in response, based on logic, conducted in SomeBean. So, i must inject response in it.
– voipp
Nov 20 '18 at 13:07
Then create a method that takes the
HttpServletResponse
instead of relying it to be set in a scoped variable. This is more clear and direct now it is hidden and you possibly tie your whole application to the web (depending on where you call that functionality inSomeBean
).– M. Deinum
Nov 20 '18 at 13:08
@M.Deinum if i create a method, that returns response won't it indicate web-related thing ? response itself is only related to web
– voipp
Nov 20 '18 at 13:26
If you use that class
SomeBean
from a a repository or a service (which is doable right now because you are injecting things) your application is now fully tied to the web. Whereas if you use it as a method signature you would probably think twice in using this class from a service and only use it in the appropriate layer.– M. Deinum
Nov 20 '18 at 13:27