spring零配置-取代web.xml
来源:互联网 发布:java中执行js代码 编辑:程序博客网 时间:2024/06/05 22:39
step1
SpringServletContainerInitializer.java
该类继承ServletContainerInitializer,实现了与servlet容器的集成。在class上添加了注解@HandlesTypes,指定了我们我们的应用程序要启动加载的类型。onStartup方法的第一个参数是一个set集合,集合中的class对应就是注解@HandlesTypes中指定的类型。@Overridepublic void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException { //存储WebApplicationInitializer实例。在本项目中有两个实例:WebContextInitializer.java和SecurityWebApplicationInitializer.java List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>(); if (webAppInitializerClasses != null) { for (Class<?> waiClass : webAppInitializerClasses) { ... initializers.add((WebApplicationInitializer) waiClass.newInstance()); ... } } ... AnnotationAwareOrderComparator.sort(initializers); servletContext.log("Spring WebApplicationInitializers detected on classpath: " + initializers); //遍历WebApplicationInitializer实例,依次调用实例的onStartup方法。 for (WebApplicationInitializer initializer : initializers) { initializer.onStartup(servletContext); }}
step2:
SecurityWebApplicationInitializer.java
调用改类的onStartup方法。调用父类的onStartup方法:AbstractSecurityWebApplicationInitializer.javapublic final void onStartup(ServletContext servletContext) throws ServletException { ... //registerFilter(servletContext, true, filterName, springSecurityFilterChain); //向ServletContext中注册spring安全框架的Filter,在web.xml中配置过springSecurity框架的应该都知道 insertSpringSecurityFilterChain(servletContext); ...}
step3:
WebContextInitializer.java
调用该类的onStartup方法。调用父类AbstractContextLoaderInitializer.java的onstartup方法//注册ContextLoaderListener,在web.xml中配置过spring框架的人都知道@Overridepublic void onStartup(ServletContext servletContext) throws ServletException { registerContextLoaderListener(servletContext);}protected void registerContextLoaderListener(ServletContext servletContext) { //创建spring的根应用上下文 WebApplicationContext rootAppContext = createRootApplicationContext(); if (rootAppContext != null) { ContextLoaderListener listener = new ContextLoaderListener(rootAppContext); listener.setContextInitializers(getRootApplicationContextInitializers()); servletContext.addListener(listener); } else { logger.debug("No ContextLoaderListener registered, as " + "createRootApplicationContext() did not return an application context"); }}调用父类AbstractDispatcherServletInitializer.java的onstartup方法//注册DispatcherServlet,在web.xml中配置过springMVC框架的人都知道@Overridepublic void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); registerDispatcherServlet(servletContext);}protected void registerDispatcherServlet(ServletContext servletContext) { String servletName = getServletName(); Assert.hasLength(servletName, "getServletName() must not return empty or null"); //创建springMVC的应用上下文 WebApplicationContext servletAppContext = createServletApplicationContext(); ... FrameworkServlet dispatcherServlet = createDispatcherServlet(servletAppContext); dispatcherServlet.setContextInitializers(getServletApplicationContextInitializers()); ServletRegistration.Dynamic registration = servletContext.addServlet(servletName, dispatcherServlet); ...}//创建spring应用上下文和创建springMVC应用上下文的实现在AbstractAnnotationConfigDispatcherServletInitializer.java中//根上下文的创建@Overrideprotected WebApplicationContext createRootApplicationContext() { //获取要加载的class,由子类实现 Class<?>[] configClasses = getRootConfigClasses(); if (!ObjectUtils.isEmpty(configClasses)) { AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext(); rootAppContext.register(configClasses); return rootAppContext; } else { return null; }}//springMVC上下文的创建@Overrideprotected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext(); //获取要加载的class,由子类实现 Class<?>[] configClasses = getServletConfigClasses(); if (!ObjectUtils.isEmpty(configClasses)) { servletAppContext.register(configClasses); } return servletAppContext;}
step4
listener,filter,servlet通过编码的方式配置到ServletContext后,后面的启动过程和xml配置一直,spring容器的启动入口在ContextLoaderListener,springMVC的启动入口在DispatchServlet,springSecurity的启动入口在SecurityFilterChain
0 0
- spring零配置-取代web.xml
- 利用WebApplicationInitializer配置SpringMVC取代web.xml
- 利用WebApplicationInitializer配置SpringMVC取代web.xml
- SpringMVC4零配置--web.xml
- SpringMVC4零配置--web.xml
- SpringMVC4零配置--web.xml
- Spring零配置xml文件
- 零xml配置Spring事务管理
- Spring4 + Tiles3 web.xml零配置
- Spring零xml配置使用详解
- 零xml配置Spring MVC文件上传
- web.xml中配置spring
- web.xml中配置Spring
- spring的web.xml配置
- spring web.xml中的配置
- web.xml配置spring监听器
- Spring的web.xml配置
- spring配置 web.xml详解
- Windows 下redis的安装使用
- Android 蓝牙开发之搜索、配对、连接、通信大全
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现
- 开发板之——关于ARM Linux下的SD卡及U盘的挂载问题
- js 格式化时间戳
- spring零配置-取代web.xml
- 实现一个简单的HashTable
- 日期格式互转:(整型)时间戳与日期格式转换
- Android资源命名规则
- PostgreSQL字符集问题
- springIOC源码解析(六)
- java中返回任意类型值( <V> V get(Object obj))
- 鼓励别人谈论他们自己
- 表格each的使用,获得某一列叠加结果,,摆脱出现的循环判断错误和类型错误 nan