夜光:@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();
    }



}

 

 

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