java - 使用配置文件的 Spring 默认接线

标签 java spring dependency-injection

我有两个 bean 。两者都实现了邮寄功能。一个只有在部署到应用程序服务器时才能工作。另一个用于测试。

我们有每个开发者和环境的资料。我只想在实际测试时连接测试 bean。不测试时应使用另一个 bean。我该如何存档?

@Component
@Profile("localtest")
public class OfflineMail implements Mailing {}

解决方法:

使用“默认”我在某处读到过这个,但是对于像“dev”这样的配置文件似乎没有退回到“默认”的方法:

@Component
@Profile("default")
public class OnlineMail implements Mailing {}

-> 没有找到用于连接的 bean 的异常。

省略个人资料:

@Component
public class OnlineMail implements Mailing {}

-> 在运行“localtest”配置文件时抛出一个独特的异常。

添加所有配置文件:

@Component
@Profile("prod")
@Profile("integration")
@Profile("test")
@Profile("dev1")
@Profile("dev2")
@Profile("dev3")
...
public class OnlineMail implements Mailing {}

这实际上是有效的,但是我们的开发人员没有编号他们使用“dev”并添加配置文件,可能适用于一个 bean,但是当它用于多个 bean 时会遇到麻烦,因为这肯定会得到丑。

使用@Profile("!localtest") 之类的方法似乎效果不佳。

有没有人知道更好的方法来获得“如果没有找到特定的 bean,默认情况下连线”?

最佳答案

我终于找到了一个简单的解决方案。

在线邮件默认是有线的。

@Component
public class OnlineMail implements Mailing {}

使用 @Primary 注释,离线邮件优先于 OnlineMail 并避免 Unique 异常。

@Component
@Profile("localtest")
@Primary
public class OfflineMail implements Mailing {}

关于java - 使用配置文件的 Spring 默认接线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15224827/

相关文章:

c# - Unity-Container 在什么时间点在 WPF 应用程序中处理它的对象?

wcf - 将对象注入(inject)自定义 WCF UserNamePassValidator - Autofac

java - 使用 JAX-RS 和 Jersey 进行基于 REST token 的身份验证的最佳实践

java - 在 Spring 中是否可以引用另一个 bean 的一部分?

java - 将 *-servlet.xml 与 applicationContext.xml 混合

java - spring - 具有范围原型(prototype)的抽象类中的 Autowiring 接口(interface)不起作用

java - Spring Security @Postfilter 没有被触发

java - 从二值图像中删除小区域

java - 启用 CPLEX 使用磁盘而不是内存

java - 为什么我的 IDE 在错误的依赖文件夹中查找所需的类?