我在example之后注入了ff4j
。 Ff4jConfiguration.class
:
@Bean
@ConditionalOnMissingBean
public FF4j getFF4j() {
return new FF4j("ff4j.xml");
}
应用程序加载程序也进行了更改:
@Import( {..., Ff4jConfiguration.class})
@AutoConfigureAfter(Ff4jConfiguration.class)
我的
ff4j.xml
:<?xml version="1.0" encoding="UTF-8" ?>
<ff4j xmlns="http://www.ff4j.org/schema/ff4j"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ff4j.org/schema/ff4j http://ff4j.org/schema/ff4j-1.4.0.xsd">
<features>
<feature uid="occurrence-logging" enable="false"/>
<feature uid="check-no-logging" enable="false"/>
<feature uid="check-logging" enable="true"/>
</features>
</ff4j>
我的bean验证
ff4j
@Component
public class JustToCheck {
@Autowired
private FF4j ff4j;
@Flip(name="occurrence-logging")
public void log() {
System.out.println("hello");
}
@Flip(name="check-no-logging")
public void log2() {
System.out.println("hello2");
}
@Flip(name="check-logging")
public void log3() {
System.out.println("hello3");
}
}
在运行时,我看到
ff4j
bean正确注入了相应的属性: ff4j.check("check-no-logging")
> result=false
ff4j.check("check-logging")
> result=true
我希望方法
log2
永远不会被调用,但是它是(所有使用过的方法都被调用,没有被忽略)。有人可以帮我在这里做错什么吗? 最佳答案
注释Flip
旨在放置在接口而不是bean上。
原因是强制人们在使用AOP时为同一方法创建不同的实现。 (在以后需要清洁时更简单)。
我可以提出2个解决方案。第一个似乎很明显,但是如果您没有多种实现方式...
@Component
public class JustToCheck {
@Autowired
private FF4j ff4j;
public void log2() {
if (ff4j.check("check-no-logging")) {
System.out.println("hello2");
} else {
System.out.println("As check-no-logging is disable... do nothin");
}
}
}
第二种是确实使用AOP,而您必须:
在您的Spring上下文中添加位于包
org.ff4j.aop
中的Autoproxy。但这已经通过添加自动配置依赖关系完成。在接口上放置
@Flip
注释并创建不同的实现:这是一个代码示例:
@Component
public interface JustToCheck {
@Flip(name="check-no-logging", alterBean="just-to-check")
void log2();
}
@Component("just-to-check")
public class JustToCheckImpl implements JustToCheck {
public void log2() {
System.out.println("hello2");
}
}
@Component("just-to-check-mock")
public class JustToCheckMock implements JustToCheck {
public void log2() {
System.out.println("As check-no-logging is disable... do nothing");
}
}
错误已被复制,可以在此处找到2个有效的解决方案:
https://github.com/clun/ff4j-samples/tree/master/ff4j-sample-sergii
您是否考虑使用“在使用AOP注释@Flip时FF4J不会翻转”之类的内容来更新标题,我的眼睛在流血