<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><strong>废话</strong></span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">:</span>
前段时间粗略看了一下jfinal的源码,然后今天在群里突然有人问jfinal的IOC实现原理是什么,竟然没有一点印象,丢人的节奏啊。然后一查,原来jfinal支持IOC要集成ioc插件,自己并没有实现IOC,意识到自己应该总结一下了,不然脸都丢完了。哈哈
可能是废话:
所有的容器都是从初始化开始的。所以看源码的初始化肯定也是从它的web.xml的那个filter钻进去的。
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>demo.DemoConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这是jfinal在web.xml中的配置。在servlet容器初始化的时候会加载JFinalFilter,当然JFinalFilter肯定是实现了Servlet的Filter接口的。我们ctrl+鼠标左键跟进去看一下JFinalFilter里边都干了什么。
上图是JFinalFilter的属性和方法列表。可以看到这几个属性Handler,encoding,JFinalConfig,Constants,JFinal。为什么在初始化的Filter里定义这几个属性呢,等一会儿我们自然会分析。我们先看JFinalFilter的init方法。
<span style="white-space: pre;">第一句</span>createJFinalConfig(filterConfig.getInitParameter("configClass"));
filterConfig.getInitParameter("configClass")
这个configClass是什么呢?相信大家都看开发 文档的。这个就是我们在web.xml中配置的初始化参数,value是我们写的继承自JFinalCo