在Actframework中使用依赖注入

申明需要注入的对象

ActFramework通过javax.inject.Inject注解识别需要注入的对象. 你可以通过以下三种标准方式申明需要注入的对象:

字段注入

public class Foo {
    @Inject
    private Bar bar;
}

构造器注入

public class Foo {
    private Bar bar
    
    @Inject
    public Foo(Bar bar) {
        this.bar = bar;
    }
}

设置器(Setter)注入

public class Foo {
    private Bar bar
    @Inject
    public void setBar(Bar bar) {
        this.bar = bar;
    }
}

小贴士 字段注入最为简明,不过对单元测试会造成一些麻烦

获取有依赖申明的对象

App app = App.instance();
// this ensure Bar has been injected into Foo
Foo foo = app.getInstance(Foo.class);

方法参数的依赖注入

Actframework支持三种方法参数注入:

  1. 响应器方法
  2. 命令器方法
  3. 任务方法

当框架检测到响应函数参数列表中某个参数类型有依赖注入绑定,框架自动使用依赖注入提供该参数值

// suppose XyzDao has bound provider,then framework will use the provider to 
// value for `dao` parameter
public Result handleXyzRequest(String s,int i,ActionContext context,XyzDao dao) {
    ...
}

通过Module类声明绑定

如果你以前使用过Guice,和通常的Guice应用一样,你可以创建Module类来申明注入绑定规则:

public class GreetingModule extends org.osgl.inject.Module {
    @Override
    protected void configure() {
        bind(GreetingService.class).to(GreetingServiceImpl.class);
    }
}

小贴士 在ActFramework中你不必使用Module类来创建Injector对象实例。框架会自动寻找所有申明的Module类并在内部创建Injector实例

链接

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...