2015-10-13 29 views
5

Birkaç (REST) ​​uç noktaya sahip yay denetleyicim var. Her bir örneğin seçici olarak etkinleştirilmiş/devre dışı bırakılmış birkaç uç noktaya sahip olacağı bu denetleyicinin birden fazla örneğini getirmek istiyorum.Özellik saygısız saygısı için ek açıklamalar REST son noktaları

Şu ana kadar yaptığım okumalara dayanarak, togglz özelliği saygısız özellik sağlar, ancak REST uç noktalarını etkinleştirmez/devre dışı bırakmaz (togglz, bir özellik etkinleştirildiğinde arayan kodun denetlenebilmesi için API sağlar); ff4j başka bir alternatif gibi gözüküyor, ancak REST son noktaları

'u etkinleştirip devre dışı bırakabiliyorsa belgelemeden çok açık değildi, ancak Feature Toggling Java Annotations iş parçacığını okudum daha uzun bir uygulama. Yapılandırma dosyasında etkinleştirilmesi/devre dışı bırakılması gereken uç noktaları belirtmek için kullanabileceğim herhangi bir paket var ve bunları devre dışı bırakmak/etkinleştirmek için REST uç noktalarında ek açıklama kullanın (bu şekilde metodumdaki mantık el değmeden kalır ve sınamaları en aza indirir)

cevap

3

@Bean veya @Component veya @Component ile bir sınıf, başlangıçta fasulye ziyaretçi mekanizması aracılığıyla yayınlanacak. Başlangıçta bu fasulyeyi ilkbahar bağlamından çıkarmak için, bir BeanPostProcessor (here) oluşturabilir ve anladığım ek açıklamayı kontrol etmeliyim, ancak anladığım kadarıyla, baklayı çalışma zamanında tekrar bağlama koyamazsınız.

Sonuç olarak

, bu fasulye yapmalısınız doğru operasyon/alay gerçekleştirmek (veya 503 HTTP kodu gönderme) istekleri geldiklerinde için 'akıllı'.

FF4j gerçekten sen ancak bu davranışı uygulayan yardımcı olabilir REST Denetleyicinizin üstünde tek bir açıklama. Yapabileceğin Ne:

  • , bir arabirim oluşturma
  • arayüzünün 2 uygulamaları oluşturma adanmış FF4J açıklama, bir uygulama veya başka bir seçim yapmak farklı bir isim
  • Kullanım FF4J her zaman arayüz açıklama işlem esnasında. İşte

bazı kod parçacığı fikir edinmek için:

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")); 
    } 
} 

istediğiniz gibi bütün numuneler here mevcuttur, tek bir yöntem veya tüm sınıf geçiş yapabilirsiniz.