IOC容器:去重配置代码
IOC containers: de-duplicating the configuration code
我正在为 2 个不同的应用程序使用 spring 框架。假设这两个应用程序都与一个 MongoDB 数据库通信。以下是我在两个应用程序中配置 MongoDB 的方式:
@Configuration
@PropertySource("file:/etc/x/y/mongodb.properties")
public class MongoConfiguration {
@Autowired
private Environment env;
@Bean
public UserCredentials mongoCredentials() {
String mongoUserName = env.getProperty("mongodb.username");
String mongoPassword = env.getProperty("mongodb.password");
UserCredentials credentials = new UserCredentials(mongoUserName, mongoPassword);
return credentials;
}
@Bean
public MongoClient mongoClient() throws Exception {
String mongoUrl = env.getProperty("mongodb.url");
String mongoPort = env.getProperty("mongodb.port");
MongoClient mongo = new MongoClient(mongoUrl, Integer.valueOf(mongoPort));
return mongo;
}
@Bean(name="mongoTemplate")
public MongoTemplate mongoTemplate() throws Exception {
String mongoDatabaseName = env.getProperty("mongodb.databasename");
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient(), mongoDatabaseName, mongoCredentials());
return mongoTemplate;
}
现在,这段代码在两个不同的应用程序配置中重复。如何避免在两个不同的地方进行此配置?
使用 Spring 引导,并可选择包含 @PropertySource
以添加到环境中。它将收集所有 MongoDB 信息并为您配置客户端和模板。
将其视为您不想复制的实用程序 class:将您的配置文件移动到一个单独的项目,并使您的两个应用程序都包含该项目。
如果您需要添加额外的项目特定配置,Spring 提供了 @Import 注释,允许您从单独的 classes 导入配置,因此您可以创建两个项目特定配置 classes,它们都从共享库中导入通用配置并提供自己的个人 bean 和 属性 源,例如:
@Configuration
@PropertySource("classpath:/com/appspecific/app.properties")
@Import(com.genericlib.BaseConfig.class)
public class AppConfig {
@Inject BaseConfig baseConfig;
@Bean
public MyBean myBean() {
// reference the base config context
return new MyBean(baseConfig.getSomething());
}
}
我正在为 2 个不同的应用程序使用 spring 框架。假设这两个应用程序都与一个 MongoDB 数据库通信。以下是我在两个应用程序中配置 MongoDB 的方式:
@Configuration
@PropertySource("file:/etc/x/y/mongodb.properties")
public class MongoConfiguration {
@Autowired
private Environment env;
@Bean
public UserCredentials mongoCredentials() {
String mongoUserName = env.getProperty("mongodb.username");
String mongoPassword = env.getProperty("mongodb.password");
UserCredentials credentials = new UserCredentials(mongoUserName, mongoPassword);
return credentials;
}
@Bean
public MongoClient mongoClient() throws Exception {
String mongoUrl = env.getProperty("mongodb.url");
String mongoPort = env.getProperty("mongodb.port");
MongoClient mongo = new MongoClient(mongoUrl, Integer.valueOf(mongoPort));
return mongo;
}
@Bean(name="mongoTemplate")
public MongoTemplate mongoTemplate() throws Exception {
String mongoDatabaseName = env.getProperty("mongodb.databasename");
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient(), mongoDatabaseName, mongoCredentials());
return mongoTemplate;
}
现在,这段代码在两个不同的应用程序配置中重复。如何避免在两个不同的地方进行此配置?
使用 Spring 引导,并可选择包含 @PropertySource
以添加到环境中。它将收集所有 MongoDB 信息并为您配置客户端和模板。
将其视为您不想复制的实用程序 class:将您的配置文件移动到一个单独的项目,并使您的两个应用程序都包含该项目。
如果您需要添加额外的项目特定配置,Spring 提供了 @Import 注释,允许您从单独的 classes 导入配置,因此您可以创建两个项目特定配置 classes,它们都从共享库中导入通用配置并提供自己的个人 bean 和 属性 源,例如:
@Configuration
@PropertySource("classpath:/com/appspecific/app.properties")
@Import(com.genericlib.BaseConfig.class)
public class AppConfig {
@Inject BaseConfig baseConfig;
@Bean
public MyBean myBean() {
// reference the base config context
return new MyBean(baseConfig.getSomething());
}
}