Hugo源码分析

本文深入剖析Hugo——JakeWharton开发的Debug日志库,基于AspectJ的AOP框架。讲解了Hugo如何利用gradle在Debug模式下插入日志代码,以及其源码中的AspectJ和Gradle编译控制。此外,还探讨了Hugo在Release包大小优化上的可能性。
摘要由CSDN通过智能技术生成

同时发表在: http://blog.houzhi.me/2016/11/05/hugo-sourcecode-analysis

Hugo是JakeWharton大神开发的一个通过注解触发的Debug日志库。它是一个非常好的AOP框架,在Debug模式下,Hugo利用aspectj库来进行切面编程,插入日志代码。通过分析Hugo的代码能够对gradle以及aspectj有一个非常好的了解。

使用示例

通过使用来看Hugo具体的功能,这样也能够更好的明白Hugo的实现方式。

首先把下面的编译配置文件添加到项目当中:


buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
  }
}

apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.hugo'

使用的时候直接使用@DebugLog注解给想要调试的方法就好了,它会打印函数的参数,执行时间,以及返回值:


@DebugLog
public String getName(String first, String last) {
  SystemClock.sleep(15); // Don't ever really do this!
  return first + " " + last;
}

输出:

V/Example: ⇢ getName(first="Jake", last="Wharton")
V/Example: ⇠ getName [16ms] = "Jake Wharton"

需要指出的,Hugo只会在Debug模式下打印log。DebugLog的源码如下:


package hugo.weaving;



import java.lang.annotation.Retention;

import java.lang.annotation.Target;



import static java.lang.annotation.ElementType.CONSTRUCTOR;

import static java.lang.annotation.ElementType.METHOD;

import static java.lang.annotation.ElementType.TYPE;

import static java.lang.annotation.RetentionPolicy.CLASS;



@Target({TYPE, METHOD, CONSTRUCTOR}) @Retention(CLASS)

public @interface DebugLog {

}

就是注解,Target也包含了TYPE,DebugLog也可以添加到类上面:


  @DebugLog

  static class Greeter {

    private final String name;



    Greeter(String name) {

      this.name = name;

    }



    private String sayHello() {

      return "Hello, " + name;

    }

  }

AspectJ

AspectJ是一个面向切面的框架,它有一个专门的编译器用来生成遵守Java字节编码规范的class文件。在这里下载安装,实际上它有自己的语法。看个简单的例子:


// 我们有一个TestService类,TestService.java

public class TestService{

    public void test(){

        System.out.println("test");

    }

    public 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HuGo版文章发布系统(三层MVC模式) 主要功能: 1、文章管理:发布、修改、删除文章,还能对文章进行置顶、推荐、审核等操作。 2、用户管理:添加、修改、删除用户,还能对用户进行审核、锁定等操作,其中用户密码用了3次MD5加密。 3、栏目管理:实现ajax二级栏目联动,对栏目进行添加修改和删除。 主要特色: 1、网站采用3层模式开发,实现了表现层、数据层和业务逻辑层的分离。 2、整站采用CSS布局,很多表现层东西都用CSS来实现。 3、本站所有链接采用UrlReWrite实现伪静态,隐藏了扩展名。 4、用AjaxPro.2.dll实现二级栏目联动,并解决了栏目取值问题。(但修改文章时二级栏目在页面加载时无法从数据库取值的问题还没解决) 5、本站采用forms身份和角色验证,实现管理员和普通用户两类不同的权限。 6、采用FCk编辑器,数据库操作用SqlHelper封装等等。 后台登陆页面:Admin/Login.aspx 默认管理帐号/密码:51aspx/51aspx data下为Sql数据库,附加即可 该网站是本人的处女作,学习net2个月,就做了那么一个系统。该系统框架是.net2.0的,但是是在vs2008下开发的。该系统算是一个演示吧。里面结合了很多技术,在一些细节上,也用了不用的方法实现。比如在实现Giewview全选这个功能的时候,在用户管理那模块中是用编程的方式在后台实现的,而在文章管理模块中却是用JS来实现的。 在做该网站时,遇到了很多问题,都基本一一解决了。但由于时间匆忙,刚做完还未进行测试就发布出来了,如果大家在使用的过程中遇到什么问题,可直接邮件至:baofen@vip.qq.com大家共同探讨。 本人网站:泡泡网络教程:http://www.hugo8.com/该网站用到的很多技术,我都写在了我网站的asp.net栏目里希望大家常光顾。 最后说下本人现大四,马上要实习了,如果哪家公司不嫌弃,给小弟介绍下,不胜感激。 申明:该源码为本人原创,首发于51aspx.com,未经本人同意,请勿用于商业用途!转载请注明!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值