博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我记录开源系统1.6源码解析(一)
阅读量:4991 次
发布时间:2019-06-12

本文共 1904 字,大约阅读时间需要 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中和本系统相关的很多重要的功能。

转载于:https://www.cnblogs.com/johnwonder/archive/2012/01/13/2322059.html

你可能感兴趣的文章
高二小假期集训—D5
查看>>
EasyUI easyui-combobox 重复发送请求
查看>>
memcached-repcached
查看>>
[转]CentOS 5.3通过yum升级php到最新版本的方法
查看>>
UVA 11235 - Frequent values RMQ的应用
查看>>
大数据日志采集系统
查看>>
java 堆调优
查看>>
linux 安装JDK
查看>>
JAVA调用CMD命令
查看>>
weblogic的安装
查看>>
SSM框架中,controller的action返回参数给vue.js
查看>>
Mysql 基础3
查看>>
smartctl工具应用(转载整理)
查看>>
控件数据绑定总结
查看>>
HTTP协议
查看>>
Vue 框架-09-初识组件的应用
查看>>
.Net core 在类库中获取配置文件Appsettings中的值
查看>>
[转载]sublime用法精华
查看>>
《甄嬛传》影评(整理)
查看>>
数的位数
查看>>