夜光:@guice依賴注入(三)

夜光序言:

 

如果,你見到一個有着憂傷雙目的漂亮男孩,一定記得告訴他回家的路。

 

 

 

 

 

正文:

package com.Genius.second;



import com.google.inject.Inject;
import com.google.inject.Provider;


/*
*
 * @title StringWritingApplet
 * @describe 提供打印helloworld的功能
 * @author hy
 * @version
 * @date 2019/6/18
 *
 */
public class StringWritingApplet implements MyApplet{
    private MyDestination destination;

    private Provider<String> stringProvider;

    @Inject
    public StringWritingApplet(MyDestination destination,@Output Provider<String> stringProvider){
        super();
        this.destination = destination;
        this.stringProvider = stringProvider;

    }


    public void writeString(){
        destination.write(stringProvider.get());
    }


    @Override
    public void run(){
        writeString();
    }


}

 

package com.Genius.second;


import com.google.inject.Inject;

import java.io.PrintStream;

public class PrintStreamWriter implements MyDestination {
     private PrintStream destination;

     @Inject
     public PrintStreamWriter(PrintStream destination){
         super();
         this.destination = destination;
     }

     @Override
    public void write(String string){
         destination = System.out;
         destination.println(string);
     }

}
package com.Genius.second;

import com.google.inject.BindingAnnotation;

import javax.xml.ws.BindingType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/*
*
 * @title Output
 * @describe  提供註解~
 * @author hy
 * @version
 * @date 2019/6/18
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@BindingAnnotation
public @interface Output {


}

 

package com.Genius.second;
/*
*
 * @title MyDestination
 * @describe 提供write方法~
 * @author hy
 * @version
 * @date 2019/6/18
 *
 */

public interface MyDestination {
     void write(String string);
}
package com.Genius.second;
/*
*
 * @title MyApplet
 * @describe 提供run方法
 *
 * @author hy
 * @version
 * @date 2019/6/18
 *
 */
public interface MyApplet extends Runnable {

}
package com.Genius.second;

import com.google.inject.AbstractModule;

/*
*
 * @title MainModule
 * @describe  Guice用來配置的類~
 * @author hy
 * @version
 * @date 2019/6/18
 *
 */

public class MainModule extends AbstractModule {

    @Override
    protected void configure(){
        install(new HelloWorldModule());
    }


}
package com.Genius.second;

import com.google.inject.AbstractModule;

import java.io.PrintStream;

/*
*
 * @title HelloWorldModule
 * @describe HelloWorld模塊的依賴配置
 * @author hy
 * @version
 * @date 2019/6/18
 *
 */
public class HelloWorldModule extends AbstractModule {

    @Override
    protected void configure(){
        bind(MyApplet.class).to(StringWritingApplet.class);
        bind(MyDestination.class).to(FirstStreamWriter.class);
        bind(PrintStream.class).toInstance(System.out);
        bind(String.class).annotatedWith(Output.class).toInstance("hi~~夜光");
    }


}

 

 

 

package com.Genius.second;

import com.google.inject.Inject;

import java.io.PrintStream;

public class FirstStreamWriter implements MyDestination {
    private PrintStream destination;

    @Inject
    public FirstStreamWriter(PrintStream destination){
        super();
        this.destination = destination;
    }

    @Override
    public void write(String string){
        destination = System.out;
        destination.println(string);
    }

}

 

package com.Genius.second;

import com.google.inject.Guice;

public class App {

    /**
     * main方法的作用
     * bootstrap:
     *   parse command line:解析命令行參數
     *   set up environment:配置環境參數
     *   kick off main logic:啓動程序邏輯
     *
     */

    public static void main(String[] args) {
        MyApplet mainApplet = Guice.createInjector(new MainModule())
                .getInstance(MyApplet.class);
        mainApplet.run();
    }



}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章