Guice 注入(@Inject注解)
带有@Inject注解的类 使用 injector.getInstance初始化
http://blog.csdn.net/java_le/article/details/24851251
Google Guice 注入(@Inject注解)
上一节介绍通过注解来实现绑定关系,这一节介绍如何通过@Inject来完成依赖注入的功能:
(1)属性注入
(2)构造方法注入
(3)setter方法注入
一.属性注入
(1)创建一个接口Hello.java和一个实现类HelloImpl
- package guice.di;
- import com.google.inject.ImplementedBy;
- //将这个接口和实现类HelloImpl绑定到一起
- @ImplementedBy(HelloImpl.class)
- public interface Hello {
- void sayHello() ;
- }
- package guice.di;
- //这里没有加@Singleton,表示是动态创建这个类,不是单例的
- public class HelloImpl implements Hello{
- @Override
- public void sayHello() {
- System.out.println("HelloImpl Say Hello");
- }
- }
通过@ImplementedBy注解,将接口和实现类绑定在一起
(2)创建一个HelloCaller(包含一个Hello属性)
- package guice.di;
- import com.google.inject.Inject;
- //HelloCaller将会去调用Hello这个接口提供的服务
- public class HelloCaller {
- //通过@Inject,来完成属性的注入
- @Inject
- private Hello hello ;
- //调用Hello的sayHello方法(实际上就是去调用HelloImpl的sayHello,因为我们将Hello的实现指定是HelloImpl)
- public void sayHello(){
- hello.sayHello() ;
- }
- }
通过@Inject注解将Hello属性的实例注入进来
(3)创建一个测试类Client
- package guice.di;
- import com.google.inject.Binder;
- import com.google.inject.Guice;
- import com.google.inject.Injector;
- import com.google.inject.Module;
- public class Client {
- //创建一个测试程序
- public static void main(String[] args) {
- Injector in = Guice.createInjector(new Module(){
- @Override
- public void configure(Binder arg0) {
- //什么也不写
- }
- }) ;
- //得到HelloCaller的实例
- HelloCaller helloCaller = in.getInstance(HelloCaller.class) ;
- //调用sayHello方法
- helloCaller.sayHello() ;
- }
- }
结果:
- HelloImpl Say Hello
二. 构造方法注入
(1)Hello和HelloImpl类还是上面那样不用变,唯一变化的是HelloCaller类
- package guice.di;
- import com.google.inject.Inject;
- public class HelloCaller1 {
- //包含一个Hello属性
- private Hello hello ;
- //@Inject注解写在构造方法上,通过构造方法的方式注入属性hello
- @Inject
- public HelloCaller1(Hello hello){
- this.hello = hello ;
- }
- public void sayHello(){
- hello.sayHello() ;
- }
- }
(2)创建测试程序
- package guice.di;
- import com.google.inject.Binder;
- import com.google.inject.Guice;
- import com.google.inject.Injector;
- import com.google.inject.Module;
- public class Client {
- //创建一个测试程序
- public static void main(String[] args) {
- Injector in = Guice.createInjector(new Module(){
- @Override
- public void configure(Binder arg0) {
- //什么也不写
- }
- }) ;
- //得到HelloCaller的实例
- HelloCaller1 helloCaller = in.getInstance(HelloCaller1.class) ;
- //调用sayHello方法
- helloCaller.sayHello() ;
- }
- }
结果:
HelloImpl Say Hello
三,setter方式注入
(1)Hello和HelloImpl类还是上面那样不用变,唯一变化的是HelloCaller类
- <span style="font-size:14px;">package guice.di;
- import com.google.inject.Inject;
- public class HelloCaller2 {
- <span style="white-space:pre"> </span>
- <span style="white-space:pre"> </span>private Hello hello ;
- <span style="white-space:pre"> </span>public Hello getHello() {
- <span style="white-space:pre"> </span>return hello;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>//通过setter方法来注入hello属性
- <span style="white-space:pre"> </span>@Inject
- <span style="white-space:pre"> </span>public void setHello(Hello hello) {
- <span style="white-space:pre"> </span>this.hello = hello;
- <span style="white-space:pre"> </span>}
- <span style="white-space:pre"> </span>
- }</span>
(2)创建测试程序
- <span style="font-size:14px;">package guice.di;
- import com.google.inject.Binder;
- import com.google.inject.Guice;
- import com.google.inject.Injector;
- import com.google.inject.Module;
- public class Client {
- //创建一个测试程序
- public static void main(String[] args) {
- Injector in = Guice.createInjector(new Module(){
- @Override
- public void configure(Binder arg0) {
- //什么也不写
- }
- }) ;
- //得到HelloCaller的实例
- HelloCaller1 helloCaller = in.getInstance(HelloCaller1.class) ;
- //调用sayHello方法
- helloCaller.sayHello() ;
- }
- }</span>
结果:
HelloImpl Say Hello
上面介绍了Guice框架的三种注入方式:属性注入,构造方法注入,setter方法注入
Guice 注入(@Inject注解)的更多相关文章
- Spring中@Autowired、@Resource和@Inject注解的使用和区别
在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring 利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理. 下面介绍 ...
- 【Spring注解驱动开发】你还不会使用@Resource和@Inject注解?那你就out了!!
写在前面 我在 冰河技术 微信公众号中发表的<[Spring注解驱动开发]使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?>一文中,介绍了如何使 ...
- Spring第四天,BeanPostProcessor源码分析,彻底搞懂IOC注入及注解优先级问题!
- Spring构造器注入、set注入和注解注入
记得刚开始学spring的时候,老师就反复的提到依赖注入和切面,平常的java开发中,在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,sp ...
- Android so注入(inject)和Hook技术学习(三)——Got表hook之导出表hook
前文介绍了导入表hook,现在来说下导出表的hook.导出表的hook的流程如下.1.获取动态库基值 void* get_module_base(pid_t pid, const char* modu ...
- Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)
什么是依赖注入 在以前的java开发中,某个类中需要依赖其它类的方法时,通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,spring提出了依赖注入的思想,即依赖类不由程序员 ...
- Android的so注入( inject)和函数Hook(基于got表) - 支持arm和x86
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53942648 前面深入学习了古河的Libinject注入Android进程,下面来 ...
- spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异
为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...
- Spring Bean 注入 2 注解篇
1. 自动装配注解 配置applicationContext.xml开启注解 <?xml version="1.0" encoding="UTF-8"?& ...
随机推荐
- android http
在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端.它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET ...
- NHibernate3.3.3 学习笔记1
前言 昨天在园友的介绍下,我找了一本学习NHibernate的书:<NHibernate 3 Beginner’s Guide>. 第一章我直接跳过了,因为是英文版的看起来很吃力,且第一章 ...
- 使用gradle打包时将依赖也合并入jar包
有些情形需要将项目依赖的jar包也合并入自己项目的jar包内,出来的这个jar我们称它为fat-jar.我所使用的方法需要用到shadow插件: 下面例子展示将mybatis打入我的jar包,并将my ...
- Mybatis学习系列(七)缓存机制
Mybatis缓存介绍 MyBatis提供一级缓存和二级缓存机制. 一级缓存是Sqlsession级别的缓存,Sqlsession类的实例对象中有一个hashmap用于缓存数据.不同的Sqlsessi ...
- thinkphp3.2 验证码的使用
验证码生成: public function verify(){ ob_clean(); $verify = new \Think\Verify; $verify->codeSet = '012 ...
- Google Play sign sha1 转 Facebook login 需要的 hashkey
:4E:::::3A:1F::A6:0F:F6:A1:C2::E5::::2E | xxd -r -p | openssl base64 输出 M05IhBlQOh9jpg/2ocIx5QE4VS4= ...
- hdu 1249 三角形 (递推)
三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- Java23个设计模式的简明教程
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- [洛谷P1430]序列取数
题目大意:给定一个序列$s$,每个人每轮可以从两端(任选一端)取任意个数的整数,不能不取.在两个人都足够聪明的情况下,求先手的最大得分. 题解:设$f_{i,j}$表示剩下$[i,j]$,先手的最大得 ...
- git使用笔记(八)团队协作
By francis_hao Nov 24,2016 本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可.欢迎转载,请注明出处 ...