在啓動時將通過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。