spring@dependson注解

zpjtge22  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(283)

尝试使用@dependson注解创建依赖于另一个bean类的配置类,后来发现@dependson只与@bean和@component一起工作,而不与@configuration一起工作。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    private static final String URL_MAPPINGS = "/*";
    private static final Class<?>[] classes = new Class[]{Application.class, Config1.class};

    public static void main(String[] args) {
        SpringApplication.run(classes, args);
    }

    ...
}
@Configuration
public class MongoConfig {
    @Value("${db.name}")
    private String dbName;

    @Value("${db.url}")
    private String url;

    @Override
    public MongoClient mongo() {
        ConnectionString connectionString = new ConnectionString("mongodb:"+url);
        MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
            .applyConnectionString(connectionString)
            .build();

        return MongoClients.create(mongoClientSettings);
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongo(), dbName);
    }

}
@Import({ MongoConfig.class, Config2.class})
@Configuration
public class Config1 {
 public BeanA beanA(MongoTemplate mongoTemplate, Environment environment) {
   return new BeanA(mongoTemplate);
 }
}
@Configuration
@ComponentScan("com.test")
//this should be processed after BeanA is created, similar to @DependsOn
public class Config2 {
   ...
}
public class BeanA {
 private MongoTemplate mongoTemplate;

 public BeanA(MongoTemplate mongoTemplate, Environment environment) {
   this.mongoTemplate = mongoTemplate;
   this.applicationPropertySource = new ApplicationPropertySource(SOURCE_NAME);
   MutablePropertySources mutablePropertySources = ((StandardEnvironment) environment).getPropertySources();
   mutablePropertySources.addFirst(applicationPropertySource);
   getExistingProperties().forEach((key, val) -> applicationPropertySource.set(key, val));
 }

 private Map<String, String> getExistingProperties() {
   //assume values are obtained from DB
 }

 public static class ApplicationPropertySource extends PropertiesPropertySource {
    public ApplicationPropertySource(String name) {
        super(name, new HashMap());
    }

    public Object set(String key, String value) {
        return getSource().put(key, value);
    }
}

我希望这样做是为了避免在项目中的所有bean上添加@dependson注解,这可能吗?
spring版本是v1.5.12.0版本

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题