当前位置: 首页 > 面试题库 >

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

赖翰
2023-03-14
问题内容

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

昨天我想出了一种使用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配置文件。相反,我尝试将环境差异封装在外部属性文件中,这些文件在运行时传递给应用程序。到目前为止,这种方法效果很好,但是非常好。



 类似资料:
  • 我正在使用gradle/querydsl和JPA 2.1。 我想使用APT(qenties)生成querydsl元数据。 为此,我使用了gradle apt插件和gradle 4.7 在我的项目中,我使用以下配置了compileJava选项:

  • 我有使用maven-processor-plugin的代码,让Hibernate在Java项目的文件夹一些类。我正在准备将项目迁移到Java 11,在开发环境和运行时环境中。 到目前为止,在Hibernate 4.3.10.Final和Java 8中一切正常。在安装JDK 11和使用Hibernate5.4.4.Final之后,我遇到了臭名昭著的<code>javax.annotation。生成的

  • 我有一个包含2个模块的maven项目。其中一个模块包含注释处理器。当我尝试将项目作为Android项目的依赖项导入时,它不会运行注释处理器。找不到生成的类文件。 我从jitpack导入如上所示的项目。jitpack上的构建成功了,我也可以在本地访问代码,这意味着编译成功了。但是应该生成的类并没有生成。所以要么是处理器没有启动,要么是我生成的类在错误的位置?android项目确实使用了许多其他带有注

  • 我有一个Spring启动应用程序,我最近从v1.3.3. RELEASE升级到v1.4.2. RELEASE。 用于我在v1中的集成测试。3.3,我有一个豆子,我能够成功地监视它。我在运行测试时,配置文件,下面的被激活,而不是应用程序的。 我正在升级到v1。4.2.发布并希望使用spyBean注释模拟单个方法,而不依赖于概要文件。 我对我的测试方法做了以下改变,以尝试它- 然而,当我尝试上述方法时

  • 问题内容: 首先一些背景: 我正在研究一些基于Apache Sling的 webapp原型代码,该代码基于OSGI并在Apache Felix上运行。尽管我认为到目前为止我已经掌握了大多数概念,但我对OSGI还是比较陌生。但是,令我感到困惑的是,我找不到一个“完整的”依赖项注入(DI)框架。我已经使用声明式服务(DS)成功地使用了基本的DI。但是我的理解是DS可以用作参考- 我该如何处理?-OSG

  • 问题内容: 我正在开发一个小型Java EE Hibernate Spring应用程序,出现错误: 这是我的控制器ArticleControleur,其中包含用于恢复文章列表的功能: 这是我的articleService: 这是我的应用程序上下文: 问题答案: 该错误表明不是注册的Bean。添加其中包含将在你的应用程序上下文中自动装配的bean的软件包: 或者,如果你想将所有子包包括在com.bd