这里咱们以上一篇数据库的例子来讲明IOC注入如何使用 原始代码部分java
private TextView query_list; private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { query_list = (TextView) findViewById(R.id.query_list); et = (EditText) findViewById(R.id.edit); }
使用了动态注入的代码数据库
@ViewInject(R.id.query_list) private TextView query_list; @ViewInject(R.id.edit) private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //initView(); x.view().inject(this); } // private void initView() { // query_list = (TextView) findViewById(R.id.query_list); // et = (EditText) findViewById(R.id.edit); // }
xutils经过反射机制使得程序动态的使用findViewById方式为属性注入对象。ide
注意:在Android Studio若是使用了动态注入的话,就等于放弃了Android Studio提供的类型检查功能。好比this
private void initView() { query_list = (TextView) findViewById(R.id.query_list); et = (EditText) findViewById(R.id.edit); //在这个方法中若是改成 //et = (EditText) findViewById(R.id.query_list); //Android Studio提供的类型检查机制会提示类型错误 //可是使用了动态注入的方式的话,Android不会检查类型是否正确 }
因此到底要不要使用动态注入机制还要看具体的使用场景code