探 Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用(转)
new?ContextLoaderListener(rootContext));??
AppConfig是自定义的类,用@Configuration注解即可。
?????? 不过问题来了:这样的设置并没有做到合二为一,只不过是把web.xml文件换成是自定义类,我们还是需要确保所写的Listener/Servlet/Filter是否mapping正确到onStartup方法中。
??????? 其实充斥我脑海的疑问是,服务器到底是怎么找到onStartup方法的。没有任何注解。? Spring在玩儿魔术?再深度research一下,其实很简单。放在下一文章中吧。
???
??????? 经过research,合二为一的事情也很好解决:不用特意写WebApplicationInitialize的实现类,直接在你写的每个Listener/Filter/Servlet中实现该接口并覆写onStartup方法,每个onStartup方法中只向container中添加自身。
??????? 这是我想到的方法,没有尝试。读者们可以试一下,我确定行地通。因为我发现了spring的这个魔术,他们用了30行左右的有效代码,做了一个循环。并且这个短短30行说明这个魔术是我们都可以在10分钟内做到的,其实关键是servlet3.0的强大。我们没有去认真读过文档而已。
?? 对于实用性,这篇文章足以解决了。代码均复制自spring api: http://static.springsource.org/spring/docs/3.1.x/javadoc-api/中对WebApplicationInitializer的示例.? 另外如果期望web.xml与基于代码的配置共存的话,需要将web.xml中版本配置到3.0以上,以下的web.xml都会被ignore掉.
?? 附:XmlWebApplicationContext和AnnotationConfigWebApplicationContext在包org.springframework.web.support中?
???????????????ContextLoaderListener?在org.springframework.web中?
?????????????? 其它未提及包名的类均是javax.servlet中的