2017-10-12 8 views
1

バーンアノテーション@Beanを使用していくつかのインスタンスを宣言する場合、引数はインジェクションであり、インスタンスが見つからない場合はNoSuchBeanExceptionをスローします。Springの@Beanメソッドでオプションのパラメータ(依存関係)を定義する方法は?

オプションにする方法?例えば@Autowired(required = false)

ような何か

@Configuration 
class SomeConfiguration { 

    @Bean 
    public SomeComponent someComponent(Depend1 depend1, 
            Depend2 depend2) { 
    SomeComponent someComponent = new SomeComponent(); 
    someComponent.setDepend1(depend1); 
    if (depend2 != null) { 
     someComponent.setDepend2(depend2); 
    } 
    return someComponent; 
    } 
} 

答えて

4

だけOptionalを使用します。

@Bean 
public SomeComponent someComponent(Depend1 depend1, Optional<Depend2> depend2) { 
    ... 
} 
+0

'Optional'を使用する場合は、パラメータとして、IntelliJのをIDEAは推奨される警告を表示します。より良い方法がない場合、私はそれを使用します – JonasGao

1

それとも、そう

@Configuration 
@Profile("dev") 
class DevConfiguration { 

    @Bean 
    public SomeComponent someComponent(Depend1 depend1) { 
    SomeComponent someComponent = new SomeComponent(); 
    someComponent.setDepend1(depend1); 
    return someComponent; 
    } 
} 

のような複数のプロファイルを定義することができます210
@Configuration 
@Profile("prod") 
class ProdConfiguration { 

    @Bean 
    public SomeComponent someComponent(Depend1 depend1, Depend2 depend2) { 
    SomeComponent someComponent = new SomeComponent(); 
    someComponent.setDepend1(depend1); 
    someComponent.setDepend2(depend2); 
    return someComponent; 
    } 
} 

コマンドライン引数-Dspring.profiles.active="dev"または-Dspring.profiles.active="prod"でアプリケーションを起動すると、適切なBeanが選択されます。例えば複数のプロファイル、テストおよびDEV場合には、同じ実装を必要とするあなたは、単にあなたがパラメータに@Autowired(required = false)を使用することができます@Profile({"dev","test"})

0

@Profile("dev")を置き換えることができます。

@Configuration 
class SomeConfiguration { 

    @Bean 
    public SomeComponent someComponent(Depend1 depend1, 
            @Autowired(required = false) Depend2 depend2) { 
    SomeComponent someComponent = new SomeComponent(); 
    someComponent.setDepend1(depend1); 
    if (depend2 != null) { 
     someComponent.setDepend2(depend2); 
    } 
    return someComponent; 
    } 
} 
関連する問題