Guice 学习(六)使用Provider注入服务( Provider Inject Service)
2016-03-01 17:36
423 查看
1、定义接口
package com.guice.providerInject; import com.google.inject.ProvidedBy; public interface Service { public void execute(); }
2、定义实现类
package com.guice.providerInject; public class OneService implements Service { @Override public void execute() { System.out.println("Hello! I'M Service 1!"); } }
3、Provider实现类
package com.guice.providerInject; import com.google.inject.Provider; /** * TODO : 每次新建一个新的OneService对象出来 * * @author E468380 */ public class OneServiceProvider implements Provider<Service> { @Override public Service get() { return new OneService(); } }
4、ProviderServiceDemo 測试类
package com.guice.providerInject; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Module; /** * 使用上面OneServiceProvider来新建实例 当然假设想自己主动注入(不使用Module手动关联)服务的话。能够使用@ProviderBy注解。 * */ public class ProviderServiceDemo { @Inject private Service service; public static void main(String[] args) { ProviderServiceDemo instance = Guice.createInjector(new Module() { @Override public void configure(Binder binder) { binder.bind(Service.class).toProvider(OneServiceProvider.class); } }).getInstance(ProviderServiceDemo.class); instance.service.execute();// Hello! I'M Service 1! } }
5、ProviderServiceDemo2測试类
假设不想使用Module手动关联服务的话。能够使用@ProviderBy注解。package com.guice.providerInject; import com.google.inject.ProvidedBy; @ProvidedBy(OneServiceProvider.class) public interface Service { public void execute(); }
package com.guice.providerInject; import com.google.inject.Guice; public class ProviderServiceDemo2 { public static void main(String[] args) { ProviderServiceDemo2 instance = Guice.createInjector().getInstance(ProviderServiceDemo2.class); // instance.service.execute(); //发现不起作用不知何解 ? } }
6、ProviderServiceDemo3測试类
package com.guice.providerInject; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Module; import com.google.inject.Provider; /** * TODO :能够注入Provider而不是注入服务 * ◇因为我们OneServiceProvider每次都是构造一个新的服务出来, * 因此在类ProviderServiceDemo3中的provider每次获取的服务也是不一样的。 * * @author E468380 */ public class ProviderServiceDemo3 { @Inject private Provider<Service> provider; public static void main(String[] args) { ProviderServiceDemo3 instance = Guice.createInjector(new Module() { @Override public void configure(Binder binder) { binder.bind(Service.class).toProvider(OneServiceProvider.class); } }).getInstance(ProviderServiceDemo3.class); instance.provider.get().execute();// Hello! I'M Service 1! } }
相关文章推荐
- require.js学习笔记1
- 详解 RN 中的 require()
- UGUI源码学习之初涉Image(一)
- UVa——540Team Queue(STL练习map、queue数组的综合使用)
- LA 2678(p48)----Subsequence
- android 自定义属性的使用一、在res/values文件下定义一个attrs.xml文件,代码如下
- IOS上关于状态栏的相关设置(UIStatusBar)
- java LinkedBlockingQueue源码简析
- SystemUI->截屏
- 手机客户端UI测试常见的测试点
- UITableView使用注意事项(unable to dequeue a cell with identifier)
- UIViewAnimationCurve 知识点
- androidStuido快捷键
- 1242 Rescue BFS
- easyUI 增删查改1
- UITableViewCell相关
- SPOJ 16549 QTREE6 - Query on a tree VI
- hadoop错误-YarnException: Unauthorized request to start container
- 在easyui使用过程中,论float="left"给我带来的麻烦
- 【转】Repository 返回 IQueryable?还是 IEnumerable?