在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实例

链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

C# 温故而知新: 线程篇(三)上

线程同步篇 (上) 线程同步中的一些重要概念 临界区(共享区)的概念 基元用户模式 基元内核模式 原子性操作 非阻止同步 阻止同步 详解Thread...

2736
来自专栏FreeBuf

Python黑客学习笔记:从HelloWorld到编写PoC(上)

本系列文章适合CS在读学生和万年工具党,本文会在英文原文的基础上做些修改,并适当增加些解释说明。 ? 本篇包含原文的前几部分: 0x0 – Getting St...

20610
来自专栏码代码的陈同学

深入JVM内幕

众所周知,Java字节码运行在JRE(Java Runtime Environment)中,JVM又是JRE中最重要的部分,主要用于分析和执行字节码。虽然不深入...

1697
来自专栏CSDN技术头条

用 Webhook+Python+Shell 编写一套 Unix 类系统监控工具

本文来自作者 Alinx 在 GitChat 上分享 「用 Webhook+Python+Shell 编写一套 Unix 类系统监控工具」

1394
来自专栏何俊林

JNI开发中,你需要知道的一些建议

本文原文是:http://developer.android.com/training/articles/perf-jni.html,翻译费了我不少功夫,但是我...

893
来自专栏后端技术探索

反射机制、依赖注入、控制反转

反向: dll->类[方法,属性]. 从已经有的dll文件反编译得到其中的一些可用的方法.

792
来自专栏Java架构师历程

JVM加载class文件的原理

当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件。那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做【加载...

1792
来自专栏余林丰

JVM入门——运行时数据区

jdk1.7.0_79  ?   这张图我相信基本上对JVM有点接触的都应该很熟悉,可以说这是JVM入门的第一课。其中的“堆”和“虚拟机栈(栈)”更是耳熟能详。...

1915
来自专栏我是攻城师

深入理解Java类加载器机制

Java里面的类加载机制,可以说是Java虚拟机核心组件之一,掌握和理解JVM虚拟机的架构,将有助于我们站在底层原理的角度上来理解Java语言,这也是为什么我们...

742
来自专栏程序员互动联盟

【专业技术】程序在内存中如何分配的?

好多初学者可能对程序在内存中如何布局都有疑问,在我们和用户的沟通过程中也发现有好多同学问相关的问题。这里转一个文章,讲得很不错的,大家可以看一下。 栈主要用来存...

2156

扫码关注云+社区