zoukankan      html  css  js  c++  java
  • 反射、注解、依赖

    反射(Reflection)

    反射的概念

    主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

    反射的作用

    反射可以让我们在运行时获取类的属性,方法,构造方法、父类、接口等信息,通过反射还可以让我们在运行期实例化对象、调用方法、即使方法或属性是私有的的也可以通过反射的形式调用。

    想要通过反射获取类的信息,就需要先获取这个类的对象。

    获取类对象的3种方法:

    1、已知类,直接获取Class对象

    Class<?> cls1 = 类名.class;

    2、通过已知某个对象获得Class对象

    Class<?> cls2 = activity.getClass();

    3、通过完整路径获取Class对象,可能报异常

    try {
        Class<?> cls3 = Class.forName("完整路径名");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    反射的相关方法

    getName():获得类的完整名字。  
    newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
    
    getFields():获得类的public类型的属性。  
    getDeclaredFields():获得类的所有属性。
    
    getMethods():获得类的public类型的方法。  
    getDeclaredMethods():获得类的所有方法。  
    getMethod(String name, Class[] parameterTypes):获得类的特定方法。
    
    getModifiers()和Modifier.toString():获得属修饰符,例如private,public,static等  
    getReturnType():获得方法的返回类型  
    getParameterTypes():获得方法的参数类型
    
    getConstructors():获得类的public类型的构造方法。  
    getConstructor(Class[] parameterTypes):获得类的特定构造方法。
    
    getSuperclass():获取某类的父类  
    getInterfaces():获取某类实现的接口

    注解(Annotation)

    注解的概念

    注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK 1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

    注解的作用

    1、标记作用,用于告诉编译器一些信息让编译器能够实现基本的编译检查,如@Override、Deprecated

    2、编译时动态处理,动态生成代码,如Butter KnifeDagger 2

    3、运行时动态处理,获得注解信息,如Retrofit

    注解的分类

    第一种方式:

    1、基本内置注解,是指Java自带的几个Annotation,如@Override、Deprecated、@SuppressWarnings等

    2、元注解(meta-annotation),是指负责注解其他注解的注解,JDK 1.5及以后版本定义了4个标准的元注解类型,如下:

    1、@Target
    2、@Retention
    3、@Documented
    4、@Inherited

    3、自定义注解,根据需要可以自定义注解,自定义注解需要用到上面的meta-annotation

    第二种注解:根据作用域分类

    1、源码时注解(RetentionPolicy.SOURCE)
    2、编译时注解(RetentionPolicy.CLASS)
    3、运行时注解(RetentionPolicy.RUNTIME)

    散点:

    1、元注解

    @Target:指Annotation所修饰的对象范围,通过ElementType取值有8种

    TYPE:类、接口(包括注解类型)或枚举
    FIELD:属性
    METHOD:方法
    PARAMETER:参数
    CONSTRUCTOR:构造函数
    LOCAL_VARIABLE:局部变量
    ANNOTATION_TYPE:注解类型
    PACKAGE:包

    @Retention:指Annotation被保留的时间长短,通过RetentionPolicy取值有3种

    SOURCE:在源文件中有效(即源文件保留)  
    CLASS:在class文件中有效(即class保留)  
    RUNTIME:在运行时有效(即运行时保留)

    2、注解定义格式

    public @interface 注解名 { 定义体 }

    3、注解参数可支持的数据类型

     8种基本数据类型,String,Class,enum,Annotation,数组

    4、⚠注意:自定义注解如果只有一个参数成员,最好把定义体参数名称设为"value",如@Target

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.ANNOTATION_TYPE)
    public @interface Target {
        ElementType[] value();
    }

    依赖注入(Dependency Injection)

    依赖的概念

    可以通过这个服务来安全的注入组件到应用程序中,在应用程序部署的时候还可以选择从特定的接口属性进行注入。

  • 相关阅读:
    log4j学习
    数据库索引
    php 通过exec 创建git分支失败
    Nginx 常用全局变量 及Rewrite规则详解
    Jetbrains phpstorm pycharm 免费授权注册码
    Nginx return 关键字配置小技巧
    PHP 加密 和 解密 方法
    Nginx 禁用IP IP段
    Yii2 捕获错误日志
    transform 实现响应式绝对居中
  • 原文地址:https://www.cnblogs.com/yl-saber/p/6592999.html
Copyright © 2011-2022 走看看