我认为很多专业人士不转投注解驱动依赖注入(inject)的主要原因是它不支持开发/测试/生产环境之间的切换。在许多情况下出于开发目的,您不仅使用不同的服务(以及它们的连接),而且有时您需要模拟它们或创建 Dummy 实例。
昨天我想出了一个带有 Spring 注解的解决方案:
@Value("#{${env} == "production" ? realService : dummyService}")
private SomeService service;
...这应该可以,但不是很好。
我会对您的解决方案或论点非常感兴趣:为什么这不是一个真正的问题 ;-) 欢迎使用 Guice、Spring 或任何其他工具。
最初的问题是这个线程的一部分:Spring @Autowired usage ,但我认为值得创建一个新线程。
最佳答案
不幸的是,我无法对 Guice 发表评论,但正如评论中所提到的,您确实可以使用 Spring 配置文件 - 如果您使用的是 Spring 3.1 或更高版本。
使用配置文件的基于 Java 的配置可能类似于:
@Configuration
@Profile("production")
public class ProductionConfig {
@Bean
public SomeService someService() { ... }
}
@Configuration
@Profile("dev")
public class DevelopmentConfig {
@Bean
public SomeService someService() { ... }
}
然后你的消费类又变得更简单了:
...
@Autowired
private SomeService someService;
...
除其他方式外,可以通过系统属性激活所需的配置文件:
-Dspring.profiles.active="production"
这在不同环境中运行您的应用程序时非常有用。
我个人尽量不依赖 Spring 配置文件。相反,我尝试将环境差异封装在外部属性文件中,这些文件在运行时传递给应用程序。这种方法到目前为止效果很好,但是 ymmv。
关于java - 处理不同环境的注解驱动的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490393/