偶然看阿波罗的源码看到有
ApolloInjector.getInstance(ConfigManager.class);
private static Injector getInjector() {
if (s_injector == null) {
synchronized (lock) {
if (s_injector == null) {
try {
s_injector = ServiceBootstrap.loadFirst(Injector.class);
} catch (Throwable ex) {
ApolloConfigException exception = new ApolloConfigException("Unable to initialize Apollo Injector!", ex);
Tracer.logError(exception);
throw exception;
}
}
}
}
return s_injector;
}
兴趣来了了解了下,这是干啥的。原来也是一个依赖注入的框架。
Github 主页:https://github.com/google/guice
API:http://google.github.io/guice/api-docs/4.0/javadoc/
理论知识,可自行百度。看了介绍,按我们程序员的传统总要写个helloWord吧。废话不多说,上demo
添加 Maven 的依赖:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.0</version>
</dependency>
/**
* @author one.xu
* @version v1.0
* @description
* @date 2019/5/30 15:43
*/
public class MyDao {
public String hello(String name) {
return "hello " + name;
}
}
/**
* @author one.xu
* @version v1.0
* @description
* @date 2019/5/30 16:02
*/
public class MyService {
@Inject
private MyDao myDao;
public String hello(String name) {
return myDao.hello(name);
}
}
/**
* @author one.xu
* @version v1.0
* @description
* @date 2019/5/30 15:51
*/
public class BaseModule extends AbstractModule {
@Override
protected void configure() {
bind(MyService.class).toInstance(new MyService());
}
@Provides
@Singleton
@Named("myDao")
public MyDao myDao() {
return new MyDao();
}
}
public class MyTest {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new BaseModule());
MyService myService = injector.getInstance(MyService.class);
System.out.println(myService.hello("one"));
}
}