This post helps you understand how to use the @HandlesTypes annotation in the Java Servlet API.
You know, the @HandlesTypes annotation is used to annotate a class that implements javax.servlet.ServletContainerInitializer interface. It declares the class types in which an implementation of ServletContainerInitializer is interested.
@HandlesTypes({Class1, Class2, Class3, ...}) public class AnInitializer implements ServletContainerInitializer { public void onStartup(Set<Class<?>> classes, ServletContext context) throws ServletException { // initialization code... } }
The Servlet container will find and pass a Set of application classes that extend, implement, or have been annotated with the class types listed by the @HandlesTypes annotation as the first argument of the onStartup() method. If the container did not find any matching classes, it will pass null.
Name | Type | Required | Description |
value | java.lang.Class[] | Required | An array of class types in which the implementation of ServletContainerInitializer is interested. |
The following code example shows a typical usage of the @HandlesTypes annotation:
@HandlesTypes({ javax.servlet.http.HttpServlet.class, javax.servlet.Filter.class }) public class AppInitializer implements ServletContainerInitializer { @Override public void onStartup(Set<Class<?>> classes, ServletContext context) throws ServletException { // initialization code... } }
In the above code, we specify two class types: javax.servlet.http.HttpServlet and javax.servlet.Filter. The Servlet container will pass a Set containing implementation classes of the listed types to the method onStartup().