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

15 浏览
0 Comments

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

我认为许多专业人士不使用基于注解的依赖注入的主要原因是它不支持在开发/测试/生产环境之间切换。在许多情况下,为了开发目的,您不仅使用不同的服务(和连接),有时还需要模拟它们或创建虚拟实例。\n昨天我找到了一个使用Spring注解的解决方案:\n

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

\n...这应该可以工作,但不够优雅。\n我对您的解决方案或论点非常感兴趣:为什么这不是一个真正的问题呢?\nGuice、Spring或其他任何框架都可以。这个问题最初是这个帖子的一部分:Spring @Autowired usage,但我认为它值得创建一个新的帖子。

0
0 Comments

问题的原因是注释不能按照你尝试的方式工作。它只能以字符串的形式提供值。为了实现你想要的目标,你可以尝试使用Spring Profiles,如建议所述。

解决方法是使用Spring Profiles来处理不同的环境。Spring Profiles是一种功能强大的机制,允许您根据不同的环境配置应用程序的行为。通过使用不同的配置文件,您可以为开发、测试和生产环境提供不同的依赖注入配置。

以下是使用Spring Profiles的示例代码:

@Configuration
@Profile("development")
public class DevelopmentConfig {
   // Development-specific configuration here
}
@Configuration
@Profile("production")
public class ProductionConfig {
   // Production-specific configuration here
}
@Configuration
@Profile("test")
public class TestConfig {
   // Test-specific configuration here
}

您可以根据需要创建多个配置类,并使用@Profile注释将它们与特定的环境关联起来。然后,在您的应用程序中,您可以使用@Autowired注释根据当前的环境自动注入正确的配置类。

这样,您就可以根据不同的环境使用不同的依赖注入配置,实现了注释驱动的依赖注入处理不同环境的需求。

0
0 Comments

注解驱动的依赖注入是一种处理不同环境的解决方案。在使用Spring 3.1及更高版本时,可以使用Spring配置文件中的profiles来实现。通过Java配置,可以创建不同环境的配置类,例如ProductionConfig和DevelopmentConfig。在这些配置类中,可以定义一些服务的实例化方法。然后,在需要使用这些服务的类中,可以直接注入相应的服务实例。

在运行应用程序时,可以通过系统属性来激活所需的profile。例如,可以使用-Dspring.profiles.active="production"来激活生产环境的配置。

个人而言,我尽量不依赖于Spring的profiles。相反,我更倾向于将环境差异封装在外部的属性文件中,并在运行时将其传递给应用程序。这种方法在我使用过程中效果良好,但可能因人而异。

0