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

Android Annotation And AspectJ

Avatar for Tony Tony
June 28, 2017

Android Annotation And AspectJ

Android Annotation And AspectJ

Avatar for Tony

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