tomcat 7 源码分析-4 server初始化背后getServer().init()

getServer().init()其实就是调用server的init函数,但是server是个interface,还要看其在new的时候,这个就是多态。

 

        digester.addObjectCreate("Server",
                                 "org.apache.catalina.core.StandardServer",
                                 "className");
        digester.addSetProperties("Server");
        digester.addSetNext("Server",
                            "setServer",
                            "org.apache.catalina.Server");

 

 上面的句子就类似于

 

		Server server = new StandardServer();
		server.init();

 

 具体的继承关系的部分如图

server和lifecycle继承关系

 

源代码很好的运用了interface和抽象类,并且继承和接口实现都有运用。可以很好的理解接口和抽象类的关系。

依照这个UML图,写了个小的demo还分析,打包在附件中,interface和class在多态上的作用。

运行了如下语句,结果发现结果一样。

		Server server = new StandardServer();
		server.init();
		
		LifecycleMbeanBase lserver = new StandardServer();
		lserver.init();
		
		Lifecycle lcserver = new StandardServer();
		lcserver.init();

 StandardServer既实现了接口server,又继承了来自server父类lifecycle(也是一个接口)实现的类LifecycleMbeanBase 。

这个关系就显的复杂了,到底在多态的时候怎么运作的?

可否这样认为:1. 实现接口,也是一定意义上的继承 2.接口的方法,最终运行还要看它实现的类

 

StandardServer最终拥有了server,lifecycle,MBeanRegistration三个特征。

server--定义很多例如全局Naming资源,端口号,地址等

lifecycle--规定了整个运行的状态,例如初始化后的状态可以使stop,也可以是starting,然后是started等。有点类似于状态机。

MBeanRegistration--资源的注册,涉及到JVM的管理

你可能感兴趣的:(apache,jvm,tomcat,UML)