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