spring源码阅读记录

spring启动方式之一:

    通过实现servlet3.0的Servlet容器初始化接口javax.servlet.ServletContainerInitializer,调用onStartup方法来启动项目。(无web.xml模式)

   具体原理:             

      实现javax.servlet.ServletContainerInitializer接口的类MyServletContainerInitializerImpl需要添加javax.servlet.annotation.HandlesTypes注解(该注解是为了获取实现类MyServletContainerInitializerImpl中onStartup(Set<Class<?>> c, ServletContext ctx)的Set<Class<?>> 集合。该集合是由HandlesTypes注解设置的类(以及该类的所有继承类)/接口(该接口的所有实现类)/注解(使用该注解的所有类/接口/方法等)组成。如果实现类MyServletContainerInitializerImpl没有添加HandlesTypes注解,或者没有找到HandlesTypes注解所指定的相关匹配集合,Set集合为null。

     实现类MyServletContainerInitializerImpl必须声明在一个jar包中。在目录META-INF/services下,文件名为接口ServletContainerInitializer的全路径,即javax.servlet.ServletContainerInitializer,内容为实现类MyServletContainerInitializerImpl的全路径。然后会被运行时的服务提供者查找机制或者容器自己特殊的机制所发现。

 )。       

  编写类实现  ServletContainerInitializer,并且添加 @HandlesTypes(xxx.class)注解,xxx类即被操作的接口

   实例:

   @HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer {

@Override

public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException {

    ...

 }

}

  

猜你喜欢

转载自blog.csdn.net/yyqhwr/article/details/84024008
今日推荐