phpcms源码跟踪(1)】的更多相关文章

本次跟踪解决几个问题: 1.缓存文件从哪里来,过程中被删除了怎么办 2.模板html是如何被引入的 进入首页时,通过最初的调用,进入控制器\phpcms\modules\content\index.php::init()中 //首页 public function init() { if(isset($_GET['siteid'])) { $siteid = intval($_GET['siteid']);//当前站点id 函数intval作用变量转成整数类型 } else { $siteid…
3种形式的元数据,fsimage是在磁盘上,meta.data是在内存上, 我们继续,前面呢,断点是打在这一行代码处, FileSystem fs = FileSystem.get(conf); weekend110的hdfs下载数据源码跟踪铺垫  +  hdfs下载数据源码分析-getFileSystem 现在,开始weekend110的hdfs源码跟踪之打开输入流 1.  清掉之前,所有的断点, dfs是fs的成员, 此刻,断点过不去了,为什么?因为,这需要在服务器上运行. 由此可见,new…
通过对ReentrantLock获取锁和释放锁源码跟踪主要想进一步深入学习AQS. 备注:AQS中的waitStatus状态码含义:…
转:https://www.jianshu.com/p/ab865109070c 本文基于Eclipse IDE 1.Quick Type Hierarchy 快速查看类继承体系. 快捷键:Ctrl + T Quick Type Hierarchy.png 查看类很多人可能都知道,可源码阅读的时候更多用来查看方法体系更重要,可以方便快速的定位到方法的实现类.如: getBean.png 此时如果想查看getBean()方法如何实现,可能会让你失望.结果如下: image.png 进入到了Bean…
1 JDK源码跟踪 // java.lang.Thread public void interrupt() { if (this != Thread.currentThread()) checkAccess(); synchronized (blockerLock) { Interruptible b = blocker; if (b != null) { interrupt0(); // Just to set the interrupt flag b.interrupt(this); ret…
spring security之 默认登录页源码跟踪 ​ 2021年的最后2个月,立个flag,要把Spring Security和Spring Security OAuth2的应用及主流程源码研究透彻! ​ 项目中使用过Spring Security的童鞋都知道,当我们没有单独自定义登录页时,Spring Security自己在初始化的时候会帮我们配置一个默认的登录页,之前一直疑问默认登录页是怎么配置的,今晚特地找了源码跟一下. springboot项目依赖 <dependency> <…
​ 上一节我们跟踪了security的默认登录页的源码,可以参考这里:https://www.cnblogs.com/process-h/p/15522267.html 这节我们来看看如何自定义单表认证页及源码跟踪. ​ 为了实现自定义表单及登录页,我们需要编写自己的WebSecurityConfig类,继承了WebSecurityConfigurerAdapter对象,通过重写configure方法,定义自己的登录页路径及失败跳转的路径. @EnableWebSecurity public c…
spring security 认证源码跟踪 ​ 在跟踪认证源码之前,我们先根据官网说明一下security的内部原理,主要是依据一系列的filter来实现,大家可以根据https://docs.spring.io/spring-security/site/docs/5.5.3/reference/html5/#servlet-hello 查看相关的文档说明,英文不好的可以配合使用google翻译. security 原理说明 ​ 在上图中,红色方框圈出来的是security 的filter,每…
spring security 授权方式(自定义)及源码跟踪 ​ 这节我们来看看spring security的几种授权方式,及简要的源码跟踪.在初步接触spring security时,为了实现它的授权,特别是它的自定义授权,在网上找了特别多的文章以及例子,觉得好难,但是现在自己尝试结合官方文档及demo来学习,颇有收获. 基于表达式Spel的访问控制 ​ Spring Security 使用 Spring EL 进行表达式支持,不了解Spring EL的童鞋自行学习.根据文档https://…
我们要使用 Hibernate 的功能,首先需要读取 Hibernate 的配置文件,根据配置启动 Hibernate ,然后创建 SessionFactory. 创建 SessionFactory 的代码很简单,这也是我们要分析的代码: Configuration cfg = new Configuration().configure(); SessionFactory factory = cfg.buildSessionFactory(); 接下来,就针对这两行代码进行分析. 1.初始化 C…
source: Monitor 获取指定对象的独占锁. [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical, __DynamicallyInvokable] public static extern void Enter(object obj); src/vm/ecall.cpp FCFuncStart(gMonitorFuncs) FCFuncElement("Enter", JIT_MonEnter)…
闲着没事,看看源码也是一种乐趣! java操作数据库的基本步骤都是类似的: 1. 建立数据库连接 2. 创建Connection 3. 创建statement或者preparedStateement 4. 执行sql,返回ResultSet 5. 关闭resultSet 5.关闭statement 6.关闭Connection Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. 1. 构造函数,三种…
1.首先在Entity实体中,命名方式有两种: 一种是显示命名,即通过@Table的name属性指定对应的数据库表名称,@Column的name属性指定实体字段对应数据库字段的名称. 另一种是隐式命名,显示命名一般不是必要的,所以可以不设置名称,交给框架来进行隐式命名. 2.Naming命名策略 我们通过spring-boot-autoconfigure中的spring.factories可以找到自动配置类org.springframework.boot.autoconfigure.orm.jp…
这次是逆雪寒的common.inc.php第二部分: <?php /* 明天放假了.今天在写点罗.放假没空写了.要陪老婆,大家看了有什么不明白的.可以跟帖问.我懂的我会回答.谢谢 [/php] 继续:: 2007-12-21 吃完中午开始分析了点代码.时间不多. [php] /* 代码讲解分析: 逆雪寒. 2007 - 12 - 21 */ /* 加载整站的配置参数文件.一般的程序都会有这个文件.做什么的呢?比如一些数据库连接地址.用户名,密码等. 需要用到的参数都定义在这个文件里面.这样以后配…
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 这篇文章主要跟踪spring配置文件中component-scan标签,查看它是怎样被解析扫描生成对应的beanDefinition. 在applicationContext.xml中做以下配置: <!-- 启动组件扫描,排除@Controller组件,该组件由SpringMVC配置文件扫描 --> <context:…
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractBeanDefinitionReader类中loadBeanDefinitions方法,该方法会对DOM文档对象进行解析,生成BeanDefinition对象,这篇文章只讲这个方法. /** * Load bean definitions from the specified resources. * @par…
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplicationContext类中refresh()方法的第一个调用方法prepareRefresh()的跟踪. @Override public void refresh() throws BeansException, IllegalStateException { synchronized (thi…
这次是逆雪寒对模板引擎实现的分析: 1 /* 函数 template函数是在global.func.php 里面定义的. 在前面的phpcms 的首页 index.php 里就见到了. 用法: include template() 用法很熟, 呵呵其实和 dz 的模板引擎一样的用法. 但DZ的模板引擎比 PHPCMS 的简单很多,因为没有用到模板的标签技术. 大家有空可以研究下DZ的模板引擎. 这里不说. 好分析下下面这个 模板的主要函数吧. 他的作用是返回编译好的模板文件路径. 也就是把模板…
这次是逆雪寒对index.php的分析: /* [/php] [ 本帖最后由 逆雪寒 于 2007-12-25 16:12 编辑 ] 尽量每天都有新的东西每天都能进一小步 现在开始讲 index.php 首页文件. 基本来说PHPCMS的加载到显示操作的整个流程都分析完了. 大家看一遍后.还要整体的来看来分析.慢慢体会.把些好的思想和思路实现到自己以后的项目里. 我相信大家都会变得很强的. 记得: 程序是死的,人是活的.有实现思路一切都好办了. [php] <?php /* 代码分析版权所有:逆…
这次是逆雪寒的文件缓存实现代码分析: /* [/php] PHPCMS的文本缓存实现: [php] <?php /* 这个文件里面全是有关生成文本缓存的函数.文本缓存是个好东西.一般的项目,我们用不着内存缓存 : memcached ,文本搞定. 原理是这样的: 我们在后台是不是可以设置很多有关网站的参数.而这些参数很多都是固定的.就不变化的.都存到咱的数据库上.而我们程序那里呢 每次都要访问数据库读出参数来进行我们程序中的操作.首先数据库查询是个很耗硬盘IO资源的一个东西,所以文本缓存刚好能减…
这次是逆雪寒的数据库类分析: <?php /* 这个讲 phpcms 的数据库类 和 phpcms 的文本缓存的实现.看了看 都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHPCMS 在来看.因为这样可以看下它的数据库结构信息.可以帮助理解. 不明白的继续问吧. 首先是数据库类,phpcms 的数据库 分mysql 和mssql 版本. MSSQL 版本的我就不说了. 他们主要的sql 语句不同点就在于我们分页常用到的 limit 语句.所以.在 mssql 数据库类驱动里.他…
这次是逆雪寒分析common.inc.php的数据库部分: <?php // 包含数据库操作类,下章详说 require PHPCMS_ROOT.'/include/'.$db_file.'.class.php'; // 遇到再说 require PHPCMS_ROOT.'/include/tag.func.php'; // 遇到再说 require PHPCMS_ROOT.'/include/extension.inc.php'; // 实例化数据库类 $db = new $db_class;…
  其实就是从网上找到的的逆雪寒的分析, 我下来之后发现格式和错字的问题,非常影响阅读,现在我就是做了下搬运工的角色, 同时将格式调整到可读性提高点而已,让各位看官稍微舒心点: 下面进入整体: <?php /* 国内著名CMS: PHPCMS 整站代码分析讲解 -2008-1-2已更新(# 20页)(第三章继续进行中..) CMS, 著名, 代码, 讲解 本帖最后由 逆雪寒 于 2010-2-20 17:21 编辑 谢谢. 代码讲解分析全部是本人.按照本人的知识水平来讲解.如果有说得不对的.请指…
1.程序启动逻辑: 首先由文件\index.php调用create_app(),此函数在文件\phpcms\base.php中,它完成初始化应用程序,调用函数load_sys_class并提供参数application,然后调用函数_load_class函数,此函数主要功能是实例化文件\phpcms\libs\classes\application.class.php中的application类,此类是应用程序初始类,它一方面加载路由配置,一方面初始化自身,函数init()做两件事,一是加载控制…
PHPCMS 一.模版引擎 如:调用单页面index.php?m=content&c=index&a=lists&catid=9.1.先获取到模版变量的值$template_list="list":然后通过$type!=0来判断是单页面,   然后通过$template = $setting['page_template'] ? $setting['page_template'] : 'page';获取单页免的模版page.html. 2.引入模版include…
Spring 版本 4.3.2 在拿到 Bean 实例以后,会经历一系列的初始化工作,如:工厂回调.init 方法.后处理器在 Bean 初始化前后的处理等,在一般情况下(非 factory-method 创建的 Bean 等),AOP代理对象的创建就在后处理器的处理方法中实现. 入口 以 AbstractAutowireCapableBeanFactory 类中的 initializeBean 方法作为起始点进行跟踪 /** * Initialize the given bean instan…
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplicationContext类refresh()方法中的第四个调用方法postProcessBeanFactory()的跟踪. @Override public void refresh() throws BeansException, IllegalStateException { synchroni…
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplicationContext类refresh()方法中的第三个调用方法prepareBeanFactory()的跟踪. @Override public void refresh() throws BeansException, IllegalStateException { synchronized…
因为字数超过了限制,所以分成了三篇,承接上篇: https://www.jianshu.com/p/46e27afd7d96 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 4.parseCustomElement <!-- 事务处理,事务只针对service层 --> <aop:config> <aop:pointcut id="pc" expression="execution(public * cn.mrdear.service.im…
因为字数超过了限制,所以分成了三篇,承接上篇: https://www.jianshu.com/p/a0cfaedf3fc5 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 3.parseDefaultElement 先跟踪一个bean标签,下面是对应的配置文件 <!--配置mapper.java扫描--> <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"> <propert…