Lors de l'utilisation de google guice, je suis tombé sur cette documentation sur la façon de graver manuellement des valeurs dans la portée de la requête.Pourquoi est-il nécessaire d'implémenter un fournisseur qui déclenche une exception lorsque vous créez manuellement une valeur?
[https://github.com/google/guice/wiki/ServletModule#dispatch-order]
Vous pouvez mettre en place un filtre personnalisé aux semences des valeurs à injecter plus tard par exemple
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() { }
};
}
Dans cette documentation, ils expliquent la liaison comme
Et la liaison pourrait ressembler à ceci:
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");
}
}
Je voudrais comprendre pourquoi il est nécessaire de mettre en œuvre une offre méthode lève une exception? Quel est son but ?
J'utilise habituellement ce système pour qu'aucune classe abstraite ne soit utilisable mais jette une exception pour une méthode qui ne devrait pas être utilisée directement, mais qui remplace une sous-classe (seulement dans le projet existant, il y a des façons plus propres) – AxelH