Guice 學習(六)使用Provider注入服務( Provider Inject Service)
阿新 • • 發佈:2019-01-30
1、定義介面
package com.guice.providerInject;
import com.google.inject.ProvidedBy;
public interface Service {
public void execute();
}
2、定義實現類
package com.guice.providerInject;
public class OneService implements Service {
@Override
public void execute() {
System.out.println("Hello! I'M Service 1!" );
}
}
3、Provider實現類
package com.guice.providerInject;
import com.google.inject.Provider;
/**
* TODO : 每次新建一個新的OneService物件出來
*
* @author E468380
*/
public class OneServiceProvider implements Provider<Service> {
@Override
public Service get() {
return new OneService();
}
}
4、ProviderServiceDemo 測試類
package com.guice.providerInject;
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Module;
/**
* 使用上面OneServiceProvider來新建例項 當然如果想自動注入(不使用Module手動關聯)服務的話,可以使用@ProviderBy註解。
*
*/
public class ProviderServiceDemo {
@Inject
private Service service;
public static void main(String[] args) {
ProviderServiceDemo instance = Guice.createInjector(new Module() {
@Override
public void configure(Binder binder) {
binder.bind(Service.class).toProvider(OneServiceProvider.class);
}
}).getInstance(ProviderServiceDemo.class);
instance.service.execute();// Hello! I'M Service 1!
}
}
5、ProviderServiceDemo2測試類
如果不想使用Module手動關聯服務的話,可以使用@ProviderBy註解。
package com.guice.providerInject;
import com.google.inject.ProvidedBy;
@ProvidedBy(OneServiceProvider.class)
public interface Service {
public void execute();
}
package com.guice.providerInject;
import com.google.inject.Guice;
public class ProviderServiceDemo2 {
public static void main(String[] args) {
ProviderServiceDemo2 instance = Guice.createInjector().getInstance(ProviderServiceDemo2.class);
// instance.service.execute(); //發現不起作用不知何解 ?
}
}
6、ProviderServiceDemo3測試類
package com.guice.providerInject;
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.Provider;
/**
* TODO :可以注入Provider而不是注入服務
* ◇由於我們OneServiceProvider每次都是構造一個新的服務出來,
* 因此在類ProviderServiceDemo3中的provider每次獲取的服務也是不一樣的。
*
* @author E468380
*/
public class ProviderServiceDemo3 {
@Inject
private Provider<Service> provider;
public static void main(String[] args) {
ProviderServiceDemo3 instance = Guice.createInjector(new Module() {
@Override
public void configure(Binder binder) {
binder.bind(Service.class).toProvider(OneServiceProvider.class);
}
}).getInstance(ProviderServiceDemo3.class);
instance.provider.get().execute();// Hello! I'M Service 1!
}
}