返回顶部
首页 > 资讯 > 精选 >Android AOP中注解处理解释器的作用有哪些
  • 345
分享到

Android AOP中注解处理解释器的作用有哪些

androidaop注解 2023-05-31 10:05:22 345人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关Android aop中注解处理解释器的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、提取Annotation信息当开发者使用了Anno

本篇文章给大家分享的是有关Android aop中注解处理解释器的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、提取Annotation信息

开发者使用了Annotation修饰了类、方法、Field等成员之后,这些Annotation不会自己生效,必须由开发者提供相应的代码来提取并处理Annotation信息。这些处理提取和处理Annotation的代码统称为APT(Annotation Processing Tool)。

jdk主要提供了两个类,来完成Annotation的提取:

  • Java.lang.annotation.Annotation接口:这个接口是所有Annotation类型的父接口。

  • java.lang.reflect.AnnotatedElement接口:该接口代表程序中可以被注解的程序元素。

1 Annotation接口

这个接口比较少用,这个接口里面有四个方法:

package java.lang.annotation;public interface Annotation { boolean equals(Object obj); int hashCode(); String toString(); //返回该注解的Class,元素使用了多个注解的时候,可以进行输出判断 Class<? extends Annotation> annotationType();}

2 AnnotatedElement接口

该接口最常用的方法是isAnnotationPresent()、getAnnotation(Class annotationClass):

package java.lang.reflect;import java.lang.annotation.Annotation;public interface AnnotatedElement { //判断此元素上是否存在指定类型的注解,如果存在则返回true,否则返回false default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {   return getAnnotation(annotationClass) != null; } //返回此元素上存在的指定类型的注解,如果该类型的注解不存在,则返回null <T extends Annotation> T getAnnotation(Class<T> annotationClass); //返回此元素上存在的所有注解。 Annotation[] getAnnotations(); //返回此元素上存在的所有注解。不包括继承 Annotation[] getDeclaredAnnotations(); default <T extends Annotation> Annotation getDeclaredAnnotation(Class<T> annotationClass) {  return AnnotatedElements.getDeclaredAnnotation(this, annotationClass); } default <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass) {  return AnnotatedElements.getDeclaredAnnotationsByType(this, annotationClass); } default <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass) {  return AnnotatedElements.getAnnotationsByType(this, annotationClass); }}

二、栗子One

简单获取方法

1 定义注解MyTag

@Target(ElementType.METHOD) //修饰方法@Retention(RetentionPolicy.RUNTIME) //运行时可以获取public @interface MyTag {}

2 定义解析器

public class MyTagParser { public static void process(Object clazz) {  try {   for (Method method : clazz.getClass().getMethods()) {    if (method.isAnnotationPresent(MyTag.class)) {     //获取到了,输出     Log.e("tag","被mytag注解修饰的方法:" + method.getName());    } else {     Log.e("tag","没有被mytag注解修饰的方法:" + method.getName());    }   }  } catch (Exception en) {   en.printStackTrace();  } }}

3 启动Activity

public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  //调用解析器  MyTagParser.process(this); } @MyTag public void testYes(){ } public void testNo(){ }}

4 结果

运行就会看到输出,表示已经获取到了对应的实例

......02-18 15:23:41.622 12446-12446/? E/tag: 没有被mytag注解修饰的方法:stopServiceAsUser02-18 15:23:41.622 12446-12446/? E/tag: 没有被mytag注解修饰的方法:takeKeyEvents02-18 15:23:41.622 12446-12446/? E/tag: 没有被mytag注解修饰的方法:testNo02-18 15:23:41.622 12446-12446/? E/tag: 被mytag注解修饰的方法:testYes02-18 15:23:41.632 12446-12446/? E/tag: 没有被mytag注解修饰的方法:toString02-18 15:23:41.632 12446-12446/? E/tag: 没有被mytag注解修饰的方法:triggerSearch02-18 15:23:41.632 12446-12446/? E/tag: 没有被mytag注解修饰的方法:unbindService.......

三、栗子Two

取到方法里面的值

1 定义注解

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface MyTag { String name() default "天平"; int age();}

2 定义解析器

public class MyTagParser { public static void parser(Object o){  Class clazz = o.getClass();  for(Method method:clazz.getMethods()){   if(method.isAnnotationPresent(MyTag.class)){    MyTag myTag = method.getAnnotation(MyTag.class);    Log.e("tag","方法名:"+method.getName()+"的注解值为"+myTag.name()+","+myTag.age());   }  } }}

3 定义activity

public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  MyTagParser.parser(this); } @MyTag(age = 20) public void testYes(){ }}

3 结果

将会输出以下内容,name和age都可以获取到。

02-18 16:11:53.493 25662-25662/? E/tag: 方法名:testYes的注解值为天平,20

以上就是Android AOP中注解处理解释器的作用有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Android AOP中注解处理解释器的作用有哪些

本文链接: https://lsjlt.com/news/224857.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android AOP中注解处理解释器的作用有哪些
    本篇文章给大家分享的是有关Android AOP中注解处理解释器的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、提取Annotation信息当开发者使用了Anno...
    99+
    2023-05-31
    android aop 注解
  • Android AOP之注解处理解释器详解(二)
    Android APO 注解处理解释器 相关文章: Android AOP注解Annotation详解(一) Android AOP之注解处理解释器详解(二) Android ...
    99+
    2022-06-06
    注解 解释器 aop Android
  • Android中AOP的注解有哪些
    本篇文章给大家分享的是有关Android中AOP的注解有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、啥是注解从JDK5开始,Java增加了Annotation(注解)...
    99+
    2023-05-31
    android aop 注解
  • Python中有哪些解释器
    这篇文章将为大家详细讲解有关Python中有哪些解释器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网...
    99+
    2023-06-14
  • resource注解的作用有哪些
    @Resource注解的作用有以下几点:1. 声明依赖注入:使用@Resource注解可以将一个依赖对象注入到另一个对象中。被注入的...
    99+
    2023-10-09
    resource
  • java注解的主要作用有哪些
    Java注解的主要作用有以下几个: 提供元数据:注解可以附加在类、方法、字段等元素上,用来提供关于这些元素的额外信息。这些信息可...
    99+
    2024-02-29
    java
  • Spring Aop在JAVA项目中的作用有哪些
    本篇文章给大家分享的是有关Spring Aop在JAVA项目中的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。假如没有aop,在做日志处理的时候,我们会在每个方法中添...
    99+
    2023-05-31
    java spring aop
  • Python解释器的种类有哪些
    本篇内容主要讲解“Python解释器的种类有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python解释器的种类有哪些”吧!1、CPython,它是用C语言开发的,所以称为CPython。...
    99+
    2023-06-20
  • SpringBoot中有哪些常用的注解
    这篇文章将为大家详细讲解有关SpringBoot中有哪些常用的注解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。@SpringBootApplication...
    99+
    2024-04-02
  • SpringBoot中常用的注解有哪些
    这篇文章主要介绍了SpringBoot中常用的注解有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、@SpringBootApplication此注解是Spring B...
    99+
    2023-06-21
  • java8中注解的用法有哪些
    这篇文章主要介绍了java8中注解的用法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java8中注解的用法有哪些文章都会有所收获,下面我们一起来看看吧。1、定义包装注释,包括实际注释的数组。@inter...
    99+
    2023-06-30
  • spring中的注解有哪些
    spring中的注解有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Spring中的注解大概可以分为两大类:1)spring的bean容器相关的注解,或者说bean工厂相关...
    99+
    2023-05-30
    spring 注解
  • 如何使用Android注解处理器
    我们就可以结合今天的Annotation Processing Tool(APT)来自定义注解处理器。 注解处理器简单解释就是收集我们标记的注解,处理注解上提供的信息。 本篇用我之前...
    99+
    2024-04-02
  • 怎么使用Android注解处理器
    小编给大家分享一下怎么使用Android注解处理器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.定义注解推荐New -> Module -> Ja...
    99+
    2023-06-14
  • SpringMVC中有哪些常用注解
    SpringMVC中有哪些常用注解?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。MVC简介MVC 全名是 Model View Controller,是模型(model)-视图...
    99+
    2023-06-15
  • android中mediasession的作用有哪些
    MediaSession在Android中的作用包括: 控制媒体播放器:通过MediaSession可以控制媒体播放器的播放、暂停...
    99+
    2024-03-06
    android
  • spring boot中有哪些常用的注解
    spring boot中有哪些常用的注解?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。@RestController和@RequestMapping注解0重要的一个新的改进...
    99+
    2023-05-31
    springboot 中有 注解
  • javascript的解释器有什么作用
    这篇文章主要介绍“javascript的解释器有什么作用”,在日常操作中,相信很多人在javascript的解释器有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ja...
    99+
    2024-04-02
  • python中异常处理的作用有哪些
    Python中的异常处理有以下作用:1. 防止程序因为错误而崩溃:异常处理可以捕获程序运行中出现的错误,并采取相应的措施来避免程序崩...
    99+
    2023-09-06
    python
  • spring mvc中的注解有哪些
    这篇文章给大家介绍spring mvc中的注解有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. @ControllerController控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,...
    99+
    2023-05-31
    springmvc
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作