V8框架的启动过程

在项目的维护中,了解整个项目的架构非常重要,对于V8系统架构的启动过程,分析如下:

启动成功后界面如下图:

看到以上的图片,说明系统启动成功;

那么在这个过程中,其实很多的东西加载,下面详细分析。

一、先从整个框架的核心---WEB.XML文件开始

web项目的核心组件是web.xml文件,此文件中注册了各种框架和应用组件;在SS1H架构中,需要在容器启动后引入spring框架,那么spring给我们提供了几个类----com.springframework.web.context.ContextLoaderListener 和 com.springframework.web.context.ContextLoaderServlet;

在V8框架的架构中,使用了ContextLoaderServlet,但是,我们并没有使用spring提供的这个类,而是自己重新写了一个com.hollycrm.springframework.web.servlet. ContextLoaderServlet 这样的一个servlet;

那么在web.xml中的配置如下:

<servlet> <servlet-name>context</servlet-name> <servlet-class>com.hollycrm.springframework.web.servlet.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> 

此时,当容器启动后,会马上加载我们自定义的这个servlet,我们要做的这个业务逻辑就可以再这个类中来实现了,具体看下面的介绍。

二、业务逻辑的加载过程

public class ContextLoaderServlet extends HttpServlet { private static final String INIT_BEAN_PARAM = "bean"; private static final String INIT_BEAN = "pilot"; private static final String COPYRIGHT = "COPYRIGHT(C) xxxxx SOFTWARE Co., Ltd. All Rights Reserved.\n\n"; //Initialize global variables public void init() throws ServletException { String bean = StringUtils.isEmpty(getInitParameter(INIT_BEAN_PARAM)) ? INIT_BEAN : getInitParameter(INIT_BEAN_PARAM); System.out.println("\n\nLoading Default Application Context ...\n"); System.out.println("* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* -> " + INIT_BEAN + " say: " + DefaultBeanFactory.getBean(bean) + " * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n" + "* * * * * * * * * * * * * * * * * * * *\n"); System.out.println("Welcome springframework tour, enjoy!\n"); System.out.println(COPYRIGHT); } 

在以上的这段代码中,首先打印很多的 ”*“号,然后调用DefaultBeanFactory来得到一个bean实例,注意,关键就在这个地方,我们看看DefaultBeanFactory的代码,如下:

public class DefaultBeanFactory { private final static String APP_CTX = "default"; private static String selector; public final static Object getBean(String beanName) { return getBean(beanName, APP_CTX); } public final static Object getBean(String beanName, String ctxName) { return getFactory(ctxName).getBean(beanName); } public final static boolean isSingleton(String beanName) { return isSingleton(beanName, APP_CTX); } public final static boolean isSingleton(String beanName, String ctxName) { return getFactory(ctxName).isSingleton(beanName); } protected final static BeanFactory getFactory(String ctxName) { BeanFactoryLocator beanFactoryLocator = selector == null ? SingletonBeanFactoryLocator .getInstance() : SingletonBeanFactoryLocator.getInstance(selector); BeanFactoryReference ref = beanFactoryLocator.useBeanFactory(ctxName); return ref.getFactory(); } 

在使用该类想获得任何bean时,都要先执行(APP_CTX)--default,  缺省的bean;该bean的配置在文件beanRefFactory.xml中,且该文件中的功能就是装载框架中需要的所有spring的配置文件,即所有的都要配置在这个文件中,各种业务的bean的配置,如下图:

该default对应的bean其实是spring框架中提供的一个类--org.springframework.context.support.ClassPathXmlApplicationContext,主要目的是读取框架的类路径中的spring的配置文件 applicationContext.xml文件的。

所以在开始启动容器时,在执行ContextLoaderServlet时,执行DefaultBeanFactory.getBean(bean)时,就已经加载了我们框架中各种业务逻辑相关的spring的 配置文件来加载各个业务逻辑和应用组件,比如数据源,各种实体类的hibernate映射,以及hibernate的属性配置,以及其他的各种工具组件等等。

最后,启动成功后,出现开始的界面。

转载于:https://www.cnblogs.com/changming/archive/2009/12/24/2042566.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值