androidpn学习笔记:服务端启动过程

来源:互联网 发布:异能事务所网络电影 编辑:程序博客网 时间:2024/05/18 15:29

简单地理一下:androidpn部署在tomcat,用到spring框架,那就从web.xml引导文件开始

1.web.xml里面加入spring框架的代码:

   <servlet>        <servlet-name>dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>

这是告诉tomcat,启动的时候(load-on-startup)的时候去执行org.springframework.web.servlet.DispatcherServlet,这个类读取dispatcher-servlet.xml文件,dispatcher-servlet.xml文件用来配置web收到请求时要映射到指定处理类。web端就这么多,点哪里会执行哪个类,这些都在dispatcher-servlet.xml文件里看得出。

2.开启5222侦听的启动过程也用到spring:

首先要知道的是XmppServer,SessionManager等等一些类都是单实例,就是项目中都是用如XmppServer.getInstance()的形式来实例化

2.1 main()开始初始化一个NotificationManager,NotificationManager的构造中初始化了单实例SessionManager

2.2 SessionManager初始化单实例XmppServer

2.3 Xmppserver实例化的时候调用start(),这个意图就很明显了。

2.4 start()里关键的一步是

            context = new ClassPathXmlApplicationContext("spring-config.xml");
这就完成了hibernate/mina/的初始化。

为什么明明只读了下配置就完成了初始化?spring-config.xml里的bean没有人去调用呢??这里特别要知道一点:

1.bean的作用域,默认的情况之下,spring容器的bean的作用域是单实例的,也就是说当我们从容器中得到的bean实例是同一个,注意默认情况下的bean是在spring容器实例化的时候就进行实例化的

2.可以使用scope标签设置bean的作用域为原型,也就是说每次得到的bean是不同的对象实例。scope="prototype"。当是原型时bean的实例化是在getbean的时候进行实例化的。也可以在xml中配置bean的加载时机为延迟。