Sök…


Anmärkningar

Viktigt att notera vid användning av villkor

  • Tillståndsklassen kallas direkt klass (inte som vårböna) så den kan inte använda egenskapen @Value injektion, dvs inga andra vårbönor kan injiceras i den.
  • Från java-dokument - Villkoren måste följa samma begränsningar som BeanFactoryPostProcessor och se till att aldrig interagera med bönorinstanser . De begränsningar som refereras här är A BeanFactoryPostProcessor kan interagera med och ändra böndefinitioner, men aldrig bönefordon. Om du gör det kan det orsaka för tidig instans av bönor, kränka behållaren och orsaka oavsiktliga biverkningar.

Registrera bönor endast när en egenskap eller värde anges

En fjäderböna kan konfigureras så att den bara registreras om den har ett visst värde eller om en specifik egenskap uppfylls. För att göra det, implementera Condition.matches att kontrollera egenskapen / värdet:

public class PropertyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("propertyName") != null;
        // optionally check the property value
    }
}

I Java-konfigurering använder du implementeringen ovan som ett villkor för att registrera bönan. Notera användningen av @ Villkorlig kommentar.

@Configuration
public class MyAppConfig {

    @Bean
    @Conditional(PropertyCondition.class)
    public MyBean myBean() {
      return new MyBean();
    }
}

I PropertyCondition kan valfritt antal villkor utvärderas. Det rekommenderas dock att separera implementeringen för varje villkor för att hålla dem löst kopplade. Till exempel:

@Configuration
public class MyAppConfig {

    @Bean
    @Conditional({PropertyCondition.class, SomeOtherCondition.class})
    public MyBean myBean() {
      return new MyBean();
    }
}

Villkorsanteckningar

Förutom den huvudsakliga @conditional anteckningen finns det en uppsättning av liknande kommentarer som ska användas för olika fall.

Klassvillkor

@ConditionalOnClass och @ConditionalOnMissingClass gör det möjligt att inkludera konfiguration baserat på närvaro eller frånvaro av specifika klasser.

Till exempel när OObjectDatabaseTx.class läggs till beroenden och det inte finns någon OrientWebConfigurer böna skapar vi konfiguratorn.

@Bean
@ConditionalOnWebApplication
@ConditionalOnClass(OObjectDatabaseTx.class)
@ConditionalOnMissingBean(OrientWebConfigurer.class)
public OrientWebConfigurer orientWebConfigurer() {
    return new OrientWebConfigurer();
}

Bönevillkor

@ConditionalOnBean och @ConditionalOnMissingBean möjligt att inkludera en böna baserad på närvaro eller frånvaro av specifika bönor. Du kan använda värdet attribut för att ange bönor efter typ, eller namn för att ange bönor efter namn. Sökattributet låter dig begränsa ApplicationContext hierarkin som bör beaktas när du söker efter bönor.

Se exemplet ovan när vi kontrollerar om det inte finns någon definierad böna.

Fastighetsvillkor

@ConditionalOnProperty anteckningen gör att konfigurationen kan inkluderas baserat på en vårmiljöegenskap. Använd prefix- och namnattribut för att ange den egenskap som ska kontrolleras. Som standard matchas alla egenskaper som finns och som inte är lika med false . Du kan också skapa mer avancerade kontroller med havingValue och matchIfMissing .

@ConditionalOnProperty(value='somebean.enabled', matchIfMissing = true, havingValue="yes")
@Bean 
public SomeBean someBean(){
}

Resursvillkor

@ConditionalOnResource anteckningen gör att konfiguration endast kan inkluderas när en specifik resurs finns.

@ConditionalOnResource(resources = "classpath:init-db.sql") 

Villkor för webbapplikation

@ConditionalOnWebApplication och @ConditionalOnNotWebApplication kommentarer gör att konfigurationen kan inkluderas beroende på om applikationen är en "webbapplikation".

@Configuration
@ConditionalOnWebApplication
public class MyWebMvcAutoConfiguration {...}

SpEL-uttrycksvillkor

@ConditionalOnExpression anteckningen gör att konfigurationen kan inkluderas baserat på resultatet av ett SpEL-uttryck.

@ConditionalOnExpression("${rest.security.enabled}==false")


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow