是否可以配置spring来实例化bean,具体取决于布尔占位符属性?或者至少从基于这样的属性的注释扫描中排除包?
答案 0 :(得分:6)
我认为您应该使用Spring 配置文件来配置不同的行为。但是,如果使用注释,则可以创建@Configuration对象和工厂方法,以根据属性值创建bean
e.g。
@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
}
}
答案 1 :(得分:1)
这可能不符合您的需求,我假设您可以控制有问题的类(即不是供应商代码),但您是否考虑过将该标记为延迟加载的bean?至少,这样它在实际使用之前不会被实例化,这可能会有条件地发生,具体取决于你的配置的其余部分。
答案 2 :(得分:1)
您可以使用 ConditionalOnProperty :
from imap_tools import MailBox
gautham_gmail_box = MailBox('imap.gmail.com')
gautham_gmail_box.login('my_email@gmail.com','my_password')
还要检查this答案。
答案 3 :(得分: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();
}
}