Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Annotation And AspectJ

Tony
June 28, 2017

Android Annotation And AspectJ

Android Annotation And AspectJ

Tony

June 28, 2017
Tweet

Other Decks in Technology

Transcript

  1. p @Deprecated:该注解的作⽤是标记某个过时的类或⽅法 ⽤法:@Deprecated public void fun { …... } p

    @Override:该注解⽤在⽅法前⾯,⽤来标识该⽅法是重写⽗类的某个⽅法 ⽤法:@Override
 public void fun() { …... }
  2. p @SuppressWarnings:可以注释⼀段代码,该注解的作⽤是阻⽌编译器 发出某些警告信息。它可以有以下参数: ➢deprecation:过时的类或⽅法警告 ➢unchecked:执⾏了未检查的转换时警告 ➢fallthrough:当 switch 程序块直接通往下⼀种情况⽽没有 break 时的

    警告 ➢path:在类路径、源⽂件路径等中有不存在的路径时的警告 ➢serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告 ➢finally:任何 finally ⼦句不能完成时的警告 ➢all:关于以上所有情况的警告 ⽤法: @SuppressWarnings(value={"unchecked"})
 ……代码
  3. p 注解有三个⽣命周期,它默认的⽣命周期是保留在⼀个 class ⽂件中,但它也可 以由⼀个 @Retention 的元注解指定它的⽣命周期。 ➢Java源⽂件: 当在⼀个注解类前定义了⼀个 @Retention(RetentionPolicy.SOURCE)

    的 注解,那么说明该注解只保留在⼀个源⽂件当中,当编译器将源⽂件编译成 class ⽂件时,它不会将源⽂件中定义的注解保留在 class ⽂件中 ➢class ⽂件中: 当在⼀个注解类前定义了⼀个 @Retention(RetentionPolicy.CLASS)的注 解,那么说明该注解只保留在⼀个 class ⽂件当中,当加载 class ⽂件到内存 时,虚拟机会将注解去掉,从⽽在程序中不能访问 ➢程序运⾏期间: 当在⼀个注解类前定义⼀个 @Retention(RetentionPolicy.RUNTIME)的注 解,那么说明该注解在程序运⾏期间都会存在内存当中。此时,我们可以通过 反射来获得定义在某个类上的所有注解
  4. p ⼀个简单的注解: public @interface Annotation01 { //定义公共的 final 静态属性 ……

    //定义公共的抽象⽅法 …… } p 注解的成员:注解和接⼜相似,它只能定义 final 静态属性和公共抽象⽅法 p 注解的⽅法: ➢⽅法前默认会加上 public abstract ➢在声明⽅法时可以定义⽅法的默认返回值,如: String color() default “blue”; String color() default {“blue”, “red”, ……} ➢⽅法的返回值的类型:可以有8种基本类型(byte, short, int, long, float, double, boolean, char,)、String、Class、枚举、注解及这些类型的数组
  5. ဳᥴ॒ቘ࢏ᔄପ(java.lang.reflect.AnnotatedElement)ғ ̴java.lang.reflect ۱ӥԆᥝ۱ތӞԶਫሿݍ੘ۑᚆጱૡٍᔄ҅ਫᴬӤ҅java.lang.reflect ۱ಅํ൉׀ጱݍ੘APIಘ شԧ᧛ݐᬩᤈ෸Annotationמ௳ጱᚆێ̶ ̴̴AnnotatedElement ളݗฎಅํᑕଧزᔰҁClass̵Method޾Constructor҂ጱᆿളݗ҅ಅզᑕଧ᭗ᬦݍ੘឴ ݐԧ຤ӻᔄጱAnnotatedElement੒᨝ԏݸ҅ᑕଧ੪ݢզ᧣አᧆ੒᨝ጱইӥࢥӻӻොဩ๶ᦢᳯAnnotationמ௳ғ ̴̴ොဩ1ғ<T extends

    Annotation> T getAnnotation(Class<T> annotationClass): ᬬࢧදᑕଧزᔰӤਂࣁጱ̵ ೰ਧᔄࣳጱဳᥴ҅ইຎᧆᔄࣳဳᥴӧਂࣁ҅ڞᬬࢧnull̶ ̴̴ොဩ2ғAnnotation[] getAnnotations():ᬬࢧᧆᑕଧزᔰӤਂࣁጱಅํဳᥴ̶ ̴̴ොဩ3ғboolean is AnnotationPresent(Class<?extends Annotation> annotationClass):ڣෙᧆᑕଧزᔰӤฎ ވ۱ތ೰ਧᔄࣳጱဳᥴ҅ਂࣁڞᬬࢧtrue҅ވڞᬬࢧfalse. ̴̴ොဩ4ғAnnotation[] getDeclaredAnnotations()ғᬬࢧፗളਂࣁԭྌزᔰӤጱಅํဳ᯽̶ӨྌളݗӾጱٌ՜ ොဩӧݶ҅ᧆොဩਖ਼஺ኼᖀಥጱဳ᯽̶ҁইຎဌํဳ᯽ፗളਂࣁԭྌزᔰӤ҅ڞᬬࢧᳩଶԅᵭጱӞӻහᕟ̶҂ᧆ ොဩጱ᧣አᘏݢզᵋ఺ץදᬬࢧጱහᕟҔᬯӧտ੒ٌ՜᧣አᘏᬬࢧጱහᕟԾኞձ֜୽ߥ̶
  6. ଉᥠጱֵአ࣋ว ௔ᚆፊഴ: ࣁොဩ᧣አڹݸᦕ୯᧣አ෸ᳵ҅ොဩಗᤈॡᳩ౲᩻෸ಸᦄ̶ ᖨਂդቘ: ᖨਂ຤ොဩጱᬬࢧ؀҅ӥེಗᤈᧆොဩ෸҅ፗള՗ᖨਂ᯾឴ݐ̶ ᫫կᏈᥴ: ֵአAOPץද᫫կጱḵᦤᔄጱڣෙ᭦ᬋ̶ ᦕ୯෭ப: ࣁොဩಗᤈڹݸᦕ୯ᔮᕹ෭ப̶ ૡ֢ၞᔮᕹ:

    ૡ֢ၞᔮᕹᵱᥝਖ਼ӱۓդᎱ޾ၞᑕ୚කդᎱႰݳࣁӞ᩸ಗᤈ҅ᮎԍ౯ժݢզֵአAOPਖ਼ٌړᐶ҅ ଚۖா೯ളӱۓ̶ ๦ᴴḵᦤ: ොဩಗᤈڹḵᦤฎވํ๦ᴴಗᤈ୮ڹොဩ҅ဌํڞಲڊဌํ๦ᴴಗᤈ୑ଉ҅ኧӱۓդᎱഔ഍̶
  7. 4̵ASM ASM ฎӞӻ Java ਁᜓᎱ඙ഴ໛ຝ̶ਙᚆड़զԫᬰګ୵ୗץද૪ํᔄ౲ᘏۖாኞ౮ᔄ̶ASM ݢզፗളԾኞԫ ᬰګ class ෈կ҅Ԟݢզࣁᔄᤩے᫹ف Java

    ᡦ೙๢ԏڹۖாදݒᔄᤈԅ̶ASM ՗ᔄ෈կӾ᧛فמ௳ݸ҅ᚆड़ දݒᔄᤈԅ҅ړຉᔄמ௳҅ኜᛗᚆड़໑ഝአಁᥝ࿢ኞ౮ෛᔄ̶ ՗Ӥᶎጱൈᬿݢզ፡ڊ҅ASMݢզࣁᖫᦲ๗ፗളץදᖫᦲڊጱਁᜓᎱ෈կ҅Ԟݢզ؟javassitӞ໏҅ࣁᬩᤈ ๗҅ᔄ෈կے᫹ڹ݄҅ץදਁᜓᎱ̶ӷᘏጱ܄ڦࣁԭ҅Ӟӻਖ਼ಅํᵱᥝAOPጱᔄ᮷Ԫضץදԧ҅Ӟӻࣁᬩᤈ෸ ᵱᥝ಍݄ץද̶ սᅩғݢզᕢفᕷಅํᔄҔӷᘏኞ౮ොୗ҅ݢզ໑ഝᵱ࿢ᭌೠ ᗌᅩғץදਁᜓᎱ҅ᵱᥝ੒class෈կྲ᫾ᆧఀ҅ᖫٟᬦᑕ॔๥ http://www.cnblogs.com/mosthink/p/6295806.html
  8. ٌ՜ጱӞԶૡٍғ DexMaker: Dalvik ᡦ೙๢Ӥ҅ࣁᖫᦲ๗౲ᘏᬩᤈ෸ኞ౮դᎱጱ Java API̶ ASMDEX: Ӟӻᔄ֒ ASM ጱਁᜓᎱ඙֢ପ҅ᬩᤈࣁAndroidଘݣ҅඙֢DexਁᜓᎱ̶

    xposed: ᵱᥝroot ฎࢩԅਙᥝۙ೮zygoteᬰᑕ๶hookᔮᕹොဩҔ Dexposed: ᴨ᯾ਫሿ҅Dexposedඪ೮՗Android2.3ک4.4 ,Dalvik Byte Buddy byte-buddy ҁݩᑍ௔ᚆ๋ளጱҔ Mockito, Hibernate, Google's Bazel build system ҂ Proxetta jodd ̶̶̶̶ See More: https://stackoverflow.com/questions/2261947/are-there-alternatives-to-cglib
  9. ඪ೮ጱᔮᕹᇇ๜ғ Dalvik 2.3 Dalvik 4.0~4.4 ӧඪ೮ጱᔮᕹᇇ๜ғ Dalvik 3.0 ART 5.1

    ART M ၥᦶӾጱᔮᕹᇇ๜ғ ART 5.0 ๚ᕪၥᦶጱᔮᕹᇇ๜ғ Dalvik 2.2 Dexposed