Una classe con @Bean
o @Component
verrà caricata da spring all'avvio attraverso il meccanismo di bean bean. Per escludere questo bean dal contesto Spring all'avvio è possibile creare un BeanPostProcessor
(here) e controllare l'annotazione dedicata MA a mio avviso, non è possibile riportare il bean al contesto in fase di runtime.
Di conseguenza, è necessario effettuare questo fagiolo 'intelligente' per eseguire il corretto funzionamento/finto (o inviare 503 codice HTTP) quando le richieste sono disponibili in.
FF4j può infatti aiutare a implementare questo comportamento, ma non con una singola annotazione sopra il tuo controller REST. Che cosa si potrebbe fare:
- creare un'interfaccia, annotare l'interfaccia con l'annotazione FF4J dedicato
- creare 2 implementazioni dell'interfaccia, ogni volta con un nome diverso
- Usa FF4J di scegliere un'implementazione o di un altro in fase di esecuzione.
Ecco qualche frammento di codice per ottenere l'idea:
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"));
}
}
è possibile passare un singolo metodo o tutta la classe, come si desidera tutti i campioni sono disponibili here.
fonte
2015-10-14 09:16:51