Guice 注入(@Inject注解)

 

带有@Inject注解的类 使用 injector.getInstance初始化

 

http://blog.csdn.net/java_le/article/details/24851251

 

Google Guice 注入(@Inject注解)

原创 2014年05月01日 22:52:16
  • 3816

上一节介绍通过注解来实现绑定关系,这一节介绍如何通过@Inject来完成依赖注入的功能:

(1)属性注入

(2)构造方法注入

(3)setter方法注入

一.属性注入

(1)创建一个接口Hello.java和一个实现类HelloImpl

 

[java]  view plain  copy
 
  1. package guice.di;  
  2.   
  3. import com.google.inject.ImplementedBy;  
  4. //将这个接口和实现类HelloImpl绑定到一起  
  5. @ImplementedBy(HelloImpl.class)  
  6. public interface Hello {  
  7.     void sayHello() ;  
  8. }  
  9.   
  10.   
  11. package guice.di;  
  12.   
  13. //这里没有加@Singleton,表示是动态创建这个类,不是单例的  
  14. public class HelloImpl implements Hello{  
  15.       
  16.     @Override  
  17.     public void sayHello() {  
  18.         System.out.println("HelloImpl Say Hello");  
  19.     }  
  20. }  

 

通过@ImplementedBy注解,将接口和实现类绑定在一起

 

(2)创建一个HelloCaller(包含一个Hello属性)

 

[java]  view plain  copy
 
  1. package guice.di;  
  2.   
  3. import com.google.inject.Inject;  
  4.   
  5. //HelloCaller将会去调用Hello这个接口提供的服务  
  6. public class HelloCaller {  
  7.       
  8.     //通过@Inject,来完成属性的注入  
  9.     @Inject  
  10.     private Hello hello ;  
  11.     //调用Hello的sayHello方法(实际上就是去调用HelloImpl的sayHello,因为我们将Hello的实现指定是HelloImpl)  
  12.     public void sayHello(){  
  13.         hello.sayHello() ;  
  14.     }  
  15. }  
通过@Inject注解将Hello属性的实例注入进来

 


(3)创建一个测试类Client

 

[java]  view plain  copy
 
  1. package guice.di;  
  2.   
  3. import com.google.inject.Binder;  
  4. import com.google.inject.Guice;  
  5. import com.google.inject.Injector;  
  6. import com.google.inject.Module;  
  7.   
  8. public class Client {  
  9.       
  10.     //创建一个测试程序  
  11.     public static void main(String[] args) {  
  12.           
  13.         Injector in = Guice.createInjector(new Module(){  
  14.             @Override  
  15.             public void configure(Binder arg0) {  
  16.                 //什么也不写  
  17.             }  
  18.         }) ;  
  19.         //得到HelloCaller的实例  
  20.         HelloCaller helloCaller = in.getInstance(HelloCaller.class) ;  
  21.         //调用sayHello方法  
  22.         helloCaller.sayHello() ;  
  23.     }  
  24.       
  25. }  

结果:

 

 

[java]  view plain  copy
 
  1. HelloImpl Say Hello  

 

 

二. 构造方法注入

(1)Hello和HelloImpl类还是上面那样不用变,唯一变化的是HelloCaller类

 

[java]  view plain  copy
 
  1. package guice.di;  
  2.   
  3. import com.google.inject.Inject;  
  4.   
  5. public class HelloCaller1 {  
  6.     //包含一个Hello属性  
  7.     private Hello hello ;  
  8.     //@Inject注解写在构造方法上,通过构造方法的方式注入属性hello  
  9.     @Inject  
  10.     public HelloCaller1(Hello hello){  
  11.         this.hello = hello ;  
  12.     }  
  13.       
  14.     public void sayHello(){  
  15.         hello.sayHello() ;  
  16.     }  
  17. }  

(2)创建测试程序

 

 

[java]  view plain  copy
 
  1. package guice.di;  
  2.   
  3. import com.google.inject.Binder;  
  4. import com.google.inject.Guice;  
  5. import com.google.inject.Injector;  
  6. import com.google.inject.Module;  
  7.   
  8. public class Client {  
  9.       
  10.     //创建一个测试程序  
  11.     public static void main(String[] args) {  
  12.           
  13.         Injector in = Guice.createInjector(new Module(){  
  14.             @Override  
  15.             public void configure(Binder arg0) {  
  16.                 //什么也不写  
  17.             }  
  18.         }) ;  
  19.         //得到HelloCaller的实例  
  20.         HelloCaller1 helloCaller = in.getInstance(HelloCaller1.class) ;  
  21.         //调用sayHello方法  
  22.         helloCaller.sayHello() ;  
  23.           
  24.     }  
  25.       
  26. }  

结果:

 

HelloImpl Say Hello

三,setter方式注入

 

(1)Hello和HelloImpl类还是上面那样不用变,唯一变化的是HelloCaller类

 

[java]  view plain  copy
 
  1. <span style="font-size:14px;">package guice.di;  
  2.   
  3.   
  4. import com.google.inject.Inject;  
  5.   
  6.   
  7. public class HelloCaller2 {  
  8. <span style="white-space:pre">  </span>  
  9. <span style="white-space:pre">  </span>private Hello hello ;  
  10.   
  11.   
  12. <span style="white-space:pre">  </span>public Hello getHello() {  
  13. <span style="white-space:pre">      </span>return hello;  
  14. <span style="white-space:pre">  </span>}  
  15. <span style="white-space:pre">  </span>//通过setter方法来注入hello属性  
  16. <span style="white-space:pre">  </span>@Inject  
  17. <span style="white-space:pre">  </span>public void setHello(Hello hello) {  
  18. <span style="white-space:pre">      </span>this.hello = hello;  
  19. <span style="white-space:pre">  </span>}  
  20. <span style="white-space:pre">  </span>  
  21. }</span>  

 

(2)创建测试程序

 

[java]  view plain  copy
 
  1. <span style="font-size:14px;">package guice.di;  
  2.   
  3. import com.google.inject.Binder;  
  4. import com.google.inject.Guice;  
  5. import com.google.inject.Injector;  
  6. import com.google.inject.Module;  
  7.   
  8. public class Client {  
  9.       
  10.     //创建一个测试程序  
  11.     public static void main(String[] args) {  
  12.           
  13.         Injector in = Guice.createInjector(new Module(){  
  14.             @Override  
  15.             public void configure(Binder arg0) {  
  16.                 //什么也不写  
  17.             }  
  18.         }) ;  
  19.         //得到HelloCaller的实例  
  20.         HelloCaller1 helloCaller = in.getInstance(HelloCaller1.class) ;  
  21.         //调用sayHello方法  
  22.         helloCaller.sayHello() ;  
  23.           
  24.     }  
  25.       
  26. }</span>  

结果:

 

HelloImpl Say Hello

 

上面介绍了Guice框架的三种注入方式:属性注入,构造方法注入,setter方法注入

 

 

转载于:https://www.cnblogs.com/ydxblog/p/7794287.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值