Google Guice注入(@Injectコメント)

3644 ワード

前の節では、注解によるバインディング関係を実現するために、@Injectを通じて注入依存機能を達成する方法を紹介します。
(1)属性注入
(2)構造方法注入
(3)setterメソッド注入
一.属性注入
(1)インターフェースHello.javaと実装クラスHello Implを作成する
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)ハローCallerを作成する(ハロー属性を含む)
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() ;
	}
}
Hello属性の例を@Inject注で注入します。
(3)試験クラスCientを作成する
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)ハローとハローの種類はまだ上のように変わりません。唯一の変化はハローの種類です。
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() ;
		
	}
	
}
結果:
ハローImpl Say Hello三、setter方式で注入します。
(1)ハローとハローの種類はまだ上のように変わりません。唯一の変化はハローの種類です。
package guice.di;


import com.google.inject.Inject;


public class HelloCaller2 {
	
	private Hello hello ;


	public Hello getHello() {
		return hello;
	}
	//  setter     hello  
	@Inject
	public void setHello(Hello hello) {
		this.hello = hello;
	}
	
}
(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() ;
		
	}
	
}
結果:
ハローImpl Say Hello
Guiceフレームの3つの注入方式を紹介しました。属性注入、構造方法注入、setterメソッド注入