Play源码

Play源码深入之七:Play的MVC实现

て烟熏妆下的殇ゞ 提交于 2019-12-15 19:32:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 整体来说,Play1.x是一个较完善的框架,各种功能都一应俱全,有点像句老话“麻雀虽小五脏俱全”哈。虽没有Struts、SpringMVC的大名气,但是使用起来,相当顺手。本文将深入Play1.x的MVC,也整合前面各方知识。 在new一个Play项目之后,都会有models、views、controllers三个文件夹,正好对应MVC,而且每类文件还必须放对地方。 这里要讲的是Play框架层面上,对MVC做的工作: M:Model(模型) ,在Model上,Play对每个Model进行了增强,在PlayPlugin中,有enhaner事件,每个插件都可以对Model进行增强,触发的时机在play.Invoker:run()中,调用init方法,检测play代码是否有变化,有变化就会发出增强事件,位置在play.classloading.ApplictionClasses:enhance()方法中。响应事件的有CorePlugin和JPAPlugin,JPAPlugin在前文已经说过,是织入JPA支持方法,而CorePlugin的enhaner有多个增强类,全在play.classloading.enhancers包中。 Model采用的ActiveRecord比POJO/DAO/Service高明

Play源码深入之二:Play应用启动时框架的初始化

徘徊边缘 提交于 2019-12-15 19:23:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 接着 上篇 在python的辅助下,理理输入启动命令之后,play框架进行的初始化工作。 application.py中的java_cmd方法中就有play.server.Server。 def java_cmd(self, java_args, cp_args=None, className='play.server.Server', args = None): 在这个类中可以看到亲切的main方法,就是框架的入口了。 public class Server { ... public static void main(String[] args) throws Exception { File root = new File(System.getProperty("application.path")); if (System.getProperty("precompiled", "false").equals("true")) { Play.usePrecompiled = true; } if (System.getProperty("writepid", "false").equals("true")) { writePID(root); } Play.init(root, System

Play源码深入之一:从play命令开始

烂漫一生 提交于 2019-12-15 19:19:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Play的命令是借助python脚本,这从下载的play包就能明显看出来:一是其中有一个python包,里面是一个play自带的python环境,还有是play.bat文件: @echo off "%~dp0python\python.exe" "%~dp0play" %* 使用python运行play文件,而play文件里就是python代码。也就是我们平时用的play命令全作用于其中。用python来操作java项目管理是比较好的方法,我参与的两个大项目都是如此。 我们一起来看看python是如何操控java滴。 play文件中引入了commandLoader/application/utils等文件,他们位于/framework/pym下: from play.cmdloader import CommandLoader from play.application import PlayApplication from play.utils import * 首先看看commandLoader,其主要作用是加载command文件下所有模块、命令等。 在command文件夹中包含了在命令行中使用的所有命令,如:eclipse.py中,就是包含了eclipsify与ec,后者是前者的简化

Play源码解析计划

让人想犯罪 __ 提交于 2019-12-10 09:14:51
最近有想法看看Play的源码,以提高自己的编码水平。之前都是东看看,西看看。最后看来去却好像无所大成。有人说过,伤敌十指,不如断敌一指,于是我有开始了学习之路。 原计划是采用1.2.3版本,但是因为换公司,1.2.3也就不会在工作中使用,所以就干脆推倒前面的,重新研究1.3.0版本。 前期大致看过Play所有源码,但是都是以包为单位,实在枯燥。后期就进行以调试为基础,借助Eclipse的Debug工具来逐步深入Play内部,这个时期较为顺畅,这应该也有前期枯燥学习的功劳^_^ 目前计划的章节有: 1. Play命令与Python 2. Play应用启动时框架的初始化 3. 一个访问的前半生:请求 4. 一个访问的后半生:响应 5. Job模块的原理 6. Play的数据库管理 7. Play的MVC模式 来源: oschina 链接: https://my.oschina.net/u/1386633/blog/498289

Play源码深入之五:Job模块的原理

廉价感情. 提交于 2019-12-10 09:08:29
先看play.jobs.JobsPlugin。 public void onApplicationStart() { int core = Integer.parseInt(Play.configuration.getProperty("play.jobs.pool", "10")); executor = new ScheduledThreadPoolExecutor(core, new PThreadFactory("jobs"), new ThreadPoolExecutor.AbortPolicy()); } 在onAppliactionStart()方法中,实例化一个ScheduledThreadPollExecutor做executor。 接受afterApplicationStart事件中,才会处理Job。 public void afterApplicationStart() { List> jobs = new ArrayList>(); for (Class clazz : Play.classloader.getAllClasses()) { if (Job.class.isAssignableFrom(clazz)) { jobs.add(clazz); } } scheduledJobs = new ArrayList(); for (final

Play中的引用其他项目包

折月煮酒 提交于 2019-12-04 02:36:25
Play 1.2.3 中主要包括的第三方包有 xstream xml与obejct互转 snakeyaml yaml解析与发射 slf4j 日志接口相关 signpost Oauth相关,第三方帐号协议 postgresql postgresql数据库驱动 oval Object Validation 对象校验框架 netty netty服务器包 mysql-connector-java mysql数据库驱动 memcached memcached缓存包 mail java邮件包 log4j 日志相关 junit 测试框架 jta java事务接口包 ehcache Ehcache缓存包 jregex 正则表达式增强包 joda-time 时间增强包。 joda-time学习笔记 jaxen XPath和开源实现,解析DOM/XOM等 javassist 解析java字节码的工具,能在类中织入代码 jamon Java Application Monitor 监控跟踪应用访问 hibernate 强大的对象关系映射框架 h2 一个关系型内存数据库 gson google出品的json解析包 groovy groovy语言包 EZMorph 对象赋值拷贝工具,能轻易地从一个对象转换从另一个对象 dom4j dom解析工具 cglib 运行期代码生成工具,与javassist类似