创建注解类:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
Class classType();
}
Retention说明:
SOURCE
被编译器忽略
CLASS
注解将会被保留在Class文件中,但在运行时并不会被VM保留。这是默认行为,所有没有用Retention注解的注解,都会采用这种策略。
RUNTIME
保留至运行时。所以我们可以通过反射去获取注解信息。(一般都使用这个)
使用:
public class MainActivity extends AppCompatActivity {
@MyAnnotation(classType = PersenterImpl.class)
IPersenter mPersenter;
MyViewModel mViewModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
for (Field f : this.getClass().getDeclaredFields()) {
MyAnnotation us = f.getAnnotation(MyAnnotation.class);
try {
Object o = us.classType().newInstance();
if(o != null){
f.set(this, o);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
这样就实现了mPersenter对象注入。