前面的博客Android中的注解中,
我们简单描述了Android中注解的含义和用途。
除了基本的用法外,注解还可以帮助我们实现代码注入,达到类似IoC的效果。
本篇博客以一个简单的例子,记录一下相关的内容。
通常的情况下,我们初始化界面的代码类似于:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBtn1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtn1 = findViewById(R.id.test);
mBtn1.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.test:
Log.d("ZJTest", "click test btn");
break;
default:
break;
}
}
}
在上面代码的基础上,我们看看如何使用注解来实现代码注入。
一、注入ContentView
首先,我们来简单地替换掉setContentView方法。
定义一个注解:
/**
* @author zhangjian on 18-3-16.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ContentView {
int value();
}
其中,@Target表示该注解可以用于什么地方,其定义如下:
public enum ElementType {
/**
* Class, interface or enum declaration.
*/
TYPE,
/**
* Field declaration.
*/
FIELD,
/**
* Method declaration.
*/
METHOD,
/**
* Parameter declaration.
*/
PARAMETER,
/**
* Constructor declaration.
*/
CONSTRUCTOR,
/**
* Local variable declaration.
*/
LOCAL_VARIABLE,
/**
* Annotation type declaration.
*/
ANNOTATION_TYPE,
/**
* Package declaration.
*/
PACKAGE
}
@Retention表示:表示需要在什么级别保存该注解信息,其定义类似于:
public enum RetentionPolicy {
/**
* Annotation is only available in the source code.
*/
SOURCE,