• Andorid之Annotation框架初使用(一)


    1. 设置Activity的布局

    @EActivity(R.layout.main)
    public class MyActivity extends Activity {}

    注: 此时在AndroidManifest.xml 注册Activity需要: <activity android:name="MyActivity_" />

    2. 设置及使用Application
    设置:在AndroidManifest.xml也需要配置<application android:name="MyApplicaton_" />

    @EApplication
    public class MyApplication extends Application {}

    使用:

    @EActivity
    public class MyActivity extends Activity {
      @App
      MyApplication application;
    }

    或者:

    @EBean
    public class MyBean {
      @App
      MyApplication application;
    }


    3. 普通类

    @EBean
    public class MyClass {}

    注:这个普通只能有一个构造函数,这个构造函数要不是没有参数,或者只有一个Context的参数

    使用: @Bean的标签每次都会创建一个实例,所以不能继承一个使用@EBean的类

    @EBean
    public class MyOtherClass {
      @Bean
      MyClass myClass;
    }


    声明接口的同时也实例化:

    @EActivity
    public class MyActivity extends Activity {
        /* A MyImplementation instance will be injected. 
         * MyImplementation 必须使用标签 @EBean and 实现 MyInterface.
         */
        @Bean(MyImplementation.class)
        MyInterface myInterface;
    }


    在普通类中引入它所在的Activity或者Service的Context

    @EBean
    public class MyClass {
      @RootContext
      Context context;
      // Only injected if the root context is an activity,else is null
      @RootContext
      Activity activity;
      // Only injected if the root context is a service,else is null
      @RootContext
      Service service;
      // Only injected if the root context is an instance of MyActivity,else is null
      @RootContext
      MyActivity myActivity;
    }


    使用标签@AfterViewInject, 会在所有依赖注入完成后才执行。

    @EBean
    public class MyClass {
      @SystemService
      NotificationManager notificationManager;
      @Bean
      MyOtherClass dependency;
      public MyClass() {
        // notificationManager and dependency are null
      }
      @AfterInject
      public void doSomethingAfterInjection() {
        // notificationManager and dependency 已经设置完成
      }
    }

    注意,拥有父子关系的@AfterInject的方法名字不能相同


    单例的普通类:

    @EBean(scope = Scope.Singleton)
    public class MySingleton {}

    注意: 在单例的普通类如果需要使用context,请使用ApplicationContext。也不要在这里注入view或者是view的事件

  • 相关阅读:
    DSP 知识点
    JVM中的垃圾收集
    MyBatis中的命名空间namespace的作用
    Gradle各版本下载地址
    redis学习笔记
    Mybaties 的缓存
    zookeeper配置集群报错Mode: standalone
    ZooKeeper 典型应用场景
    Linux下搭建mongDB环境
    关系型数据库三范式
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3149798.html
Copyright © 2020-2023  润新知