在启动时将通过bean访问机制在弹出窗口中加载一个带有@Bean
或@Component
的类。要在启动时从Spring上下文中排除这个bean,你可以创建一个BeanPostProcessor
(here)并检查专用注释BUT,据我所知,你不能在运行时将bean放回上下文。
因此,你必须让这个bean的“智能”来执行正确的操作/模拟(或发送503 HTTP代码),当请求进来,
FF4j的确可以帮你实现这个行为,但不在您的REST控制器之上添加一个注释。你可以做什么:
- 创建一个接口,使用专用FF4J注释
- 创建接口的2个实现,使用不同的名称
- 使用FF4J每次选择一个执行或其他注释界面在运行时。
这里是一些代码段的想法:
public interface GreetingService {
@Flip(name = "theFeatureIDToToggle", alterBean = "greeting.french")
String sayHello(String name);
}
@Component("greeting.french")
public class GreetingServiceFrenchImpl implements GreetingService {
public String sayHello(String name) {return "Bonjour " + name;
}
@Component("greeting.english")
public class GreetingServiceEnglishImpl implements GreetingService {
public String sayHello(String name) {return "Hello " + name;
}
//... import
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-ff4j-aop-test.xml")
public class FeatureAdvisorTest {
@Autowired
private FF4j ff4j;
@Autowired
@Qualifier("greeting.english")
private GreetingService greeting
@Test
public void testAnnotatedFlipping_with_alterBean() {
ff4j.disable("theFeatureIDToToggle");
Assert.assertTrue(greeting.sayHello("CLU").startsWith("Hello"));
ff4j.enable("theFeatureIDToToggle");
Assert.assertTrue(greeting.sayHello("CLU").startsWith("Bonjour"));
}
}
您可以切换一个方法或全班同学,因为你希望所有的样品都可以here。