我有一个用 注释的 Producers 类@Singleton
,其中包含一个用 注释的方法@Produces
。
我想使用这种方法的替代方法编写单元测试,但无法做到。这是我的代码的摘要:
package fr.easycompany.easywrite.tools.injection;
@Singleton
public class Producers {
@Produces @Named(PREFERENCES_FILE_NAMED)
public String producePreferenceFileName(){
return "preferences.xml";
}
}
我的替代方案:
package fr.easycompany.easywrite.tools.injection;
@Singleton
@Alternative
public class ProducersAlternative {
@Produces @Named(PREFERENCES_FILE_NAMED)
public String producePreferenceFileName(){
return "preferences_test.xml";
}
}
我还在 src/test/resources/META-INF 中创建了一个 beans.xml,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:weld="http://jboss.org/schema/weld/beans"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
<alternatives>
<class>fr.easycompany.easywrite.tools.injection.ProducersAlternative</class>
</alternatives>
</beans>
在执行时,它总是Producers#producePreferenceFileName()
被调用。为什么不是ProducersAlternative
方法?是否不可能有单例注入类的替代方案?