Android 依赖注入之Dagger
来源:互联网 发布:spring源码视频 编辑:程序博客网 时间:2024/05/16 05:58
简介
最近Dagger这套android的依赖注入框架比较多人关注,感觉跟后端Spring 框架的IOC差不多。这个框架它的好处是它没有采用反射技术(Android 中的Butterknife和后端的Spring都是用反射),而是用预编译技术,因为基于反射的框架会非常耗用资源。
开发配置
第一步
在项目的buidl.grader中添加:
dependencies { classpath 'com.android.tools.build:gradle:2.1.2' //3.添加dagger需要的依赖 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' }
第二步
在app的buidl.grader中添加:
apply plugin: 'com.neenbedankt.android-apt' //1.添加dagger需要的依赖 .... .... dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.1.1' //2.添加dagger需要的依赖 provided 'org.glassfish:javax.annotation:10.0-b28' compile 'com.google.dagger:dagger:2.5' compile 'com.google.dagger:dagger-compiler:2.5' }
第三步
重新构建项目
简单使用
在MainActivity中我们需要用到UserService这个类的登录方法。以前的思路就是new UserService()对象,然后调用对象中的方法。现在我们使用依赖注入就不需要手动new UserService()这个对象了,而直接通过注解就可以实例化UserService这个对象。看下面代码:
@Inject UserService userService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化view btn_login=(Button)findViewById(R.id.btn_login); ed_userName=(EditText)findViewById(R.id.ed_userName); ed_password=(EditText)findViewById(R.id.ed_password); //获取用户名与密码 userName= ed_userName.getText().toString().trim(); passWord = ed_password.getText().toString().trim(); //依赖注入 DaggerActivityComponent .builder() .activityModule(new ActivityModule()) .build() .inject(this); //点击登录 btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //userService对象直接通过Inject来注入,不需要new对象了 boolean loginResult = userService.login(userName,passWord); Toast.makeText(MainActivity.this,"loginResult="+loginResult,Toast.LENGTH_SHORT).show(); } }); }
真的好像Spring中IOC,直接通过注解就是实现对象的创建,太叼了。那么这个中功能到底是如何实现的呢?
依赖实现分析
第一步
- 新建一个UserService
public class UserService { public boolean login(String userName,String password){ if("liujun".equals(userName)&&"123123".equals(password)){ return true; }else{ return false; } } }
该对象是准备注入到MainAcitivty中使用
第二步
- 新建一个Module
@Module public class ActivityModule { @Provides UserService provideUser() { //产生对象(依赖) return new UserService(); } }
@Module 是用来标记这个类是:一个用来产生依赖的组件。
例如产生:UserService的依赖。(依赖其实就是对象的意思)
第三步
- 新建一个Component
@Component(modules = ActivityModule.class) public interface ActivityComponent { void inject(MainActivity mainActivity); }
@Component是用来标记这个类是:是将依赖注入到需要依赖中的组件(依赖其实就是对象的意思)
例如:MainActivity中需要一个依赖:UserService。这个依赖是在ActivityModule中产生,那么ActivityComponent的作用就是一个桥梁:是将依赖注入到需要依赖中的组件
第三步
- make project 作用就是自动生成:DaggerActivityComponent类
第四步
- 在MainActivity使用依赖注入对象
@Inject UserService userService;//需要对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化view btn_login=(Button)findViewById(R.id.btn_login); ed_userName=(EditText)findViewById(R.id.ed_userName); ed_password=(EditText)findViewById(R.id.ed_password); //获取用户名与密码 userName= ed_userName.getText().toString().trim(); passWord = ed_password.getText().toString().trim(); //依赖注入(将产生的对象注入到需要对象中的组件) DaggerActivityComponent .builder() .activityModule(new ActivityModule()) .build() .inject(this); //点击登录 btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //userService对象直接通过Inject来注入,不需要new对象了 boolean loginResult = userService.login(userName,passWord); Toast.makeText(MainActivity.this,"loginResult="+loginResult,Toast.LENGTH_SHORT).show(); } }); }
项目下载github
1 0
- Android 依赖注入之Dagger
- 【Android】【Dagger】Dagger2 依赖注入
- Android 依赖注入(DI)框架 Dagger
- Android Dagger依赖注入框架浅析
- Android依赖注入:Dagger、RoboGuice和ButterKnife
- Android Dagger依赖注入框架浅析
- Android依赖注入: Dagger (Part 1)
- Android依赖注入: Dagger (Part 2)
- Android依赖注入:Dagger(Part 3)
- Android 依赖注入框架 Dagger 学习
- Android Dagger依赖注入框架浅析
- Android依赖注入库Dagger的使用
- Android依赖注入:Dagger、RoboGuice和ButterKnife
- Android Dagger依赖注入框架浅析
- Android依赖注入:Dagger、RoboGuice和ButterKnife
- Android —— Dagger依赖注入库
- Android依赖注入:Dagger、RoboGuice和ButterKnife
- Android Dagger依赖注入框架浅析
- DatePicker控件/日期控件,只显示年月/隐藏日
- Spring Data MongoDB 环境搭建
- 查看LINUX进程内存占用情况
- Spring三种bean注入方式
- JSP中在提交表单之前,发送ajax请求进行js的验证
- Android 依赖注入之Dagger
- hdu 1007 Quoit Design 最近点对(分治)
- 对I2C总线的时钟同步和总线仲裁的深入理解
- 数据库优化
- HTML与JSP页面的区别
- lua(8)-C API 2[C++与lua的交互]
- 选择算法-在线性时间内选择任意第几个小(大)的数
- 心得一、让你迅速成长的甚至成功的,从来不是努力
- Ubuntu下Sublime Text3搭建python3.5编程环境小记录