How to instantiate Spring bean with custom scope and @Autowired dependencies? -
in our project, use spring request scoped beans. we've requirement support async requests , request scoped beans don't work child threads. i'm aware of requestcontextfilter , it's "support" async appears requestcontextfilter expects main thread wait child threads finish, isn't case us. our main thread returns after spawning new threads using @async annotation , dispatcherservlet clears out requestcontextholder. when child threads point need request scoped bean, @autowired fails.
i'm aware of simplethreadscope doesn't clean thread-local attributes , in thread-pooling situation, not dangerous use downright useless.
what need custom scope. far, i've found 3 useful examples of them fall short in beans instantiate part of custom scope plain pojos without dependencies. needless that's non-existent in real life application. can suggest way instantiate custom scoped beans have @autowired dependencies on beans other scopes?
what found far:
continuing discussion other question's answer here...
.
i'm referring
<aop:scoped-proxy/>link points to. each time autowired field referenced, custom scope'sget()method called lookup instance based on criteria.
.
i understand can dependencies (though unsure how, scope isn't bean, perhaps need pass application context during instantiation?). don't understand how inject dependencies bean if those're marked @autowired? or saying custom scoped bean shouldn't have @autowired dependencies?
it works automatically; spring injects proxy bean , scope.get() invoked on every method call on bean, returning specific instance want in context of current invocation.
take @ abstractrequestattributesscope see how works (in case, gets instance http request and, if doesn't exist, creates it).
so, code calls foo() on proxy; framework calls scope desired instance , calls foo() on instance.
the exposed methods wish call must either on interface or not declared final.
Comments
Post a Comment