zoukankan      html  css  js  c++  java
  • 我记录开源系统1.6源码解析(一)

    我记录给我的感觉还可以,毕竟大部分是出自一人之手,能做到这样已经很不错,下面我来一步步尝试分析它是如何实现如

    此强大的功能的。

    首先从Global.asax开始,这是应用程序开始的地方,可以看到Application_Start这个方法。我们可以先从这个方法入手。

            wojilu.Web.SystemInfo.Init();//系统的固定数据,比如网站根路径,app路径,主机(ip+端口号)名称等。这里的信息是以后路由的参考信息,在以后Url和实际地址映射的时候将用到这里的数据
    


    首先分析wojilu.Web.SystemInfo.Init()方法,该方法在SystemInfo这个类下,属于静态方法可以直接由类调用。

    public static void Init() {
    
               if (_hasInitialized) return;
    
               lock (_objLock) {
                   if (_hasInitialized) return;
                   SystemInfo obj = SystemInfo.Instance;
                   _hasInitialized = true;
               }
           }

    简单的几行却做了很多工作,if(_hasInitialized)判断是否已经初始化,如果已经初始化就返回不执行下面的代码,lock代码片段应该是控制并发操作的,通过锁住某个对象(_objLock),_objLock对象定义如下:

    private static Object _objLock = new Object();


    关键在于

    SystemInfo obj = SystemInfo.Instance;


    此代码调用了SystemInfo的静态成员Instance

    public static SystemInfo Instance = loadSystemInfo();


    这里又调用了loadSystemInfo方法。主要就是loadSystemInfo这个方法了。我们把目光转移到此方法上就好。

    private static SystemInfo loadSystemInfo() {
    
               SystemInfo obj = new SystemInfo();
    
               if (IsWeb) {
                   obj.applicationPath = HttpContext.Current.Request.ApplicationPath;//用在映射文件绝对路径
                   obj.rootPath = addEndSlash( obj.applicationPath );
                   obj.host = HttpContext.Current.Request.Url.Host;
               }
               else {
                   obj.applicationPath = "/";
                   obj.rootPath = "/";
                   obj.host = "localhost";
               }
    
               return obj;
    
           }

    首先初始化SystemInfo实例,结果返回该实例,代码很简单,就给实例的属性赋值,包括:applicationPath,rootPath,hostPath,用于系统初始化。addEndSlash方

    法定义如下:

    private static String addEndSlash( String appPath ) {
               if (!appPath.EndsWith( "/" )) return appPath + "/";
               return appPath;
           }

    很简单,就是返回以“/”结束的字符串。

    wojilu.Web.SystemInfo.Init()方法就解析到这,接下来我们会解析

    wojilu.Web.Mvc.MvcFilterLoader.Init();


    这个重要的方法,该方法会把我们导向Web.Config中和本系统相关的很多重要的功能。

  • 相关阅读:
    c++命名规范与代码风格
    subline的多行游标快捷键
    selenium中的action
    Fiddler 教程(转)
    java.util.NoSuchElementException解决办法
    http协议中的URI
    深入研究java.lang.Runtime类(转)
    深入研究java.lang.Process类(转)
    java调用autoit3脚本
    AutoIT转
  • 原文地址:https://www.cnblogs.com/johnwonder/p/2322059.html
Copyright © 2011-2022 走看看