ActFramework 依赖注入 III - 定义绑定

ActFramework 依赖注入 II - 注入对象类型中我们提到了定义绑定的一种方式:

1. 使用Module

  1. // Define bindings
  2. public class MyModule extends org.osgl.inject.Module {
  3. protected void configure() {
  4. bind(MyService.class).to(OneService.class);
  5. bind(MyService.class).named("two").to(TwoService.class);
  6. }
  7. }

这篇文章继续介绍ActFramework的其他绑定方式

2. 自定义工厂

工厂和上面的Module是相当的, 把上面的Module用工厂的方式来写会是这样:

  1. public class MyFactory {
  2. @org.osgl.inject.annotation.Provides
  3. public MyService getOneService(OneService oneService) {
  4. return oneService;
  5. }
  6. @org.osgl.inject.annotation.Provides
  7. @Named("two")
  8. public MyService getTwoService(TwoService twoService) {
  9. return twoService;
  10. }
  11. }

3. 自动绑定

自动绑定不需要定义Module和工厂,但是需要在Interface(被绑定类)上使用@AutoBind注解:

  1. // The interface
  2. @act.inject.AutoBind
  3. public interface MyService {
  4. void service();
  5. }

定义缺省实现

  1. // The implemention one
  2. public class OneService implements MyService {
  3. public void service() {Act.LOGGER.info("ONE is servicing");}
  4. }

使用@javax.inject.Named注解定义Qualified的实现

  1. // The implemention two
  2. @javax.inject.Named("two")
  3. public class TwoService implements MyService {
  4. public void service() {Act.LOGGER.info("TWO is servicing");}
  5. }

使用依赖注入

  1. // Inject the service
  2. public class Serviced {
  3. // this one will get bind to the default implementation: OneService
  4. @javax.inject.Inject
  5. private MyService one;
  6. // this one will get bind to TwoService
  7. @javax.inject.Inject
  8. @javax.inject.Named("two")
  9. private MyService two;
  10. }

链接