[英]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.