當你調用一個你必須通過一個新實例作爲參數的Java方法時,這個新實例是如何由CDI容器創建的?如何創建按需實例?
在下面的例子:我添加監聽到aynchronous servlet上下文:
@WebServlet(value = "/example", asyncSupported = true)
public class ExampleServlet extends HttpServlet {
@Override
protected void doPost(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException,
IOException {
// ... some code
AsyncContext aCtx = req.startAsync(req, resp);
aCtx.addListener(**new AsyncListener()** {
// implementation of the async listener
});
// ...
}
}
因此,而不是手動執行這一新AsyncListener()的實例化,我想它由CDI創建容器。
當然,我希望每個異步上下文都有自己的偵聽器實例,否則我只是將@Inject的AsyncListener注入爲servlet類的字段。
現在,找不到任何方法來做到這一點。 有人有想法分享?
+1很好知道它實際上可以進行調整 – kostja
還要注意CDI 1.0中記錄良好的內存泄漏,並將實例和依賴的範圍對象注入到更大的範圍對象中,但是對於您正在做的事情您應該沒事的。 – LightGuard
@LightGuard:好點,但我必須承認,我不確定爲什麼這種情況是安全的。是否因爲servlet不被視爲限定範圍的bean? –