创建自己的依赖注入注释

时间:2016-02-10 22:09:21

标签: java android dependency-injection annotations

我正在创建一个jar库,我希望用户使用DI来访问库接口。

例如:

而不是在每个使用lib的类中写这个:

ApiEntryPoint entry = API.getEntryPoint();

我希望用户能够使用字段注释:

@ApiEntry  
private ApiEntryPoint entry;

我已经研究过Dagger和Guice,但我不认为它们提供了创建我自己的DI注释的方法。

任何让我入门的提示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先你应该创建你的注释:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE })
public @interface ApiEntry {
    ApiEntry value();
}

之后你应该创建一个producer来返回你要注入的bean的实例:

public class ApiEntryFactory implements Serializable {

    private static final long serialVersionUID = -1L;

    @Produces
    @ApiEntry
    public ApiEntryPoint getApiEntryPoint(ApiEntryPoint apiEntryPoint) {
        return apiEntryPoint;
    }
}

然后,你创建你的bean:

@Named
public class ApiEntryPoint implements Serializable {
    ...
}

最后但同样重要的是,您将实例注入您需要的位置:

@Inject
@ApiEntry
private ApiEntryPoint apiEntryPoint;

关于配置,您需要beans.xml文件才能启用CDI。由于您正在开发JAR文件,因此beans.xml文件必须位于META-INF目录中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>

如果出现任何疑问,您也可以查看here