注解驱动的依赖注入,可处理不同的环境

2023-11-24

我认为许多专业人士不转向注解驱动的依赖注入的主要原因是它不支持开发/测试/生产环境之间的切换。在许多情况下,出于开发目的,您不仅使用不同的服务(及其连接),有时还需要模拟它们或创建虚拟实例。

昨天我想出了一个带有Spring注释的解决方案:

    @Value("#{${env} == "production" ? realService : dummyService}")
    private SomeService service;

...这应该可以,但不太好。

我对您的解决方案或论点非常感兴趣:为什么这不是一个真正的问题;-) 欢迎 Guice、Spring 或任何其他人。

最初的问题是该线程的一部分:Spring @Autowired 用法,但我认为值得创建一个新线程。


不幸的是,我无法对 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注解驱动的依赖注入,可处理不同的环境 的相关文章

随机推荐