在使用google guice時,我遇到了如何在請求範圍中手動生成值的文檔。爲什麼有必要實現在手動生成值時拋出異常的提供程序?
[https://github.com/google/guice/wiki/ServletModule#dispatch-order]
可以實現自定義過濾器的種子值,以在稍後例如注射
protected Filter createUserIdScopingFilter() {
return new Filter() {
@Override public void doFilter(
ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
// ...you'd probably want more sanity checking here
Integer userId = Integer.valueOf(httpRequest.getParameter("user-id"));
httpRequest.setAttribute(
Key.get(Integer.class, Names.named("user-id")).toString(),
userId);
chain.doFilter(request, response);
}
@Override public void init(FilterConfig filterConfig) throws ServletException { }
@Override public void destroy() { }
};
}
在本文檔中,他們被解釋爲
的綁定和結合可能是這樣的:
public class YourServletModule extends ServletModule {
@Override protected void configureServlets() {
.....
filter("/process-user*").through(createUserIdScopingFilter());
}
@Provides @Named("user-id") @RequestScoped Integer provideUserId() {
throw new IllegalStateException("user id must be manually seeded");
}
}
我想明白爲什麼有必要實施提供方法拋出異常?它的目的是什麼? https://google.github.io/guice/api-docs/4.1/javadoc/com/google/inject/Scope.html#scope-com.google.inject.Key-com.google.inject.Provider-
必須有一些初步的供應商來包裝,即使一個沒有做任何有用的:
我通常使用這個系統對於沒有抽象類是可用的,但爲某些不應該直接使用的方法拋出異常,而是在子類中重寫(僅在現有項目中,有更清晰的方法) – AxelH