簡體   English   中英

創建自己的依賴項注入注釋

[英]Create own dependency injection annotation

我正在創建一個jar庫,希望用戶使用DI來訪問庫界面。

例如:

而不是在每個使用lib的類中編寫此代碼:

ApiEntryPoint entry = API.getEntryPoint();

我希望用戶能夠使用字段注釋:

@ApiEntry  
private ApiEntryPoint entry;

我研究了Dagger和Guice,但我不認為它們提供了創建我自己的DI注釋的方法。

任何使我入門的提示將不勝感激。

首先,您應該創建注釋:

@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>

如有任何疑問,也可以在這里查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM