HttpServletResponse bean injected into bean in mvc












0















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 ?










share|improve this question























  • 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













  • 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











  • 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
















0















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 ?










share|improve this question























  • 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













  • 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











  • 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














0












0








0


1






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 ?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 '18 at 12:58









voippvoipp

18011




18011













  • 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













  • 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











  • 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



















  • 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













  • 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











  • 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

















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












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
});


}
});














draft saved

draft discarded


















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
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

ComboBox Display Member on multiple fields

Is it possible to collect Nectar points via Trainline?