1

ブール値のプレースホルダー プロパティに応じて、Spring を構成して Bean をインスタンス化するかどうかを設定することは可能ですか? または、少なくともそのようなプロパティに基づいて注釈スキャンからパッケージを除外するには?

4

4 に答える 4

8

さまざまな動作を構成するには、Springプロファイルを使用する必要があると思います。ただし、アノテーションを使用している場合は、 @Configuration オブジェクトと、プロパティ値に基づいて Bean を作成するファクトリ メソッドを作成できます。

例えば

@Configuration
class ExampleConfig {
    private final String prop;

    public ExampleConfig(@Value("${your.prop.name}" prop} {
       this.prop = prop;
    }

    @Bean 
    public YourBeanClass create() {
         if (prop.equals("someValue") {
            return new YourBeanClass();
         }
         return new OtherClass(); // must be subclass/implementation of YBC
    } 
}
于 2013-07-18T14:56:43.700 に答える
0

@Conditional を使用することもできます

ステップ 1 : Condition を実装するクラスを作成する

public class ProdDataSourceCondition implements Condition {

@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    String dbname = context.getEnvironment().getProperty("database.name");
    return dbname.equalsIgnoreCase("prod");
}}

ステップ 2: @Conditional で上記のクラスを使用する

    @Configuration
    public class EmployeeDataSourceConfig {


  ....

    @Bean(name="dataSource")
    @Conditional(ProdDataSourceCondition.class)
    public DataSource getProdDataSource() {
      return new ProductionDatabaseUtil();
    }
    }

http://javapapers.com/spring/spring-conditional-annotation/

于 2017-01-01T19:37:37.863 に答える