有没有人可以在条件下自动装配bean?
下面是一个例子。我们有两个FileManager实现。其中一个实现应该在依赖属性“platform”中初始化。通过Archaius处理属性。
@Component
public class AwsPlatformCondition implements Condition {
@Autowired
private ArchaiusProperties archaiusProperties;
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return "aws".equalsIgnoreCase(archaiusProperties.getStringProperty(PropertiesMapper.PLATFORM));
}
}
。
@Component
public class StandardPlatformCondition implements Condition {
@Autowired
private ArchaiusProperties archaiusProperties;
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return "standard".equalsIgnoreCase(archaiusProperties.getStringProperty(PropertiesMapper.PLATFORM));
}
}
。
@Component
@Conditional(AwsPlatformCondition.class)
public class AS3FileManager implements FileManager {
...
}
。
@Component
@Conditional(StandardPlatformCondition.class)
public class NativeFileManager implements FileManager {
...
}
此代码无效。主要原因是ArchaiusProperties bean在条件匹配时未初始化。在条件中使用ArchaiusProperties bean之前,有没有方法初始化它?
如果我们看看java文档中的条件接口-
条件必须遵循与BeanFactoryPostProcessor相同的限制,并且注意不要与bean实例交互。
限制包括(来自BeanFactoryPostProcessor的java文档)
BeanFactoryPostProcessor可以与bean定义交互并修改bean定义,但决不能修改bean实例。这样做可能会导致过早实例化bean,违反容器并导致意外的副作用。
所以你试图实现的是不推荐的东西;已经遇到的副作用。
然而,如果我们在文档中进一步挖掘条件
要更细粒度地控制与@configurationbean交互的条件,请考虑ConfigurationCondition接口。
这里的限制也是违反的。因此,在这个场景中使用条件并不是一个好主意。
因此,在我看来,你最好选择@Profile,在这里你可以一次激活所需的概要文件,并使用相应的bean;不考虑附带的装饰。
我到处找,找不到我问题的答案。所以我想要一个只在特定条件下显示的条件属性,例如: 如您所见,我只想在等于默认值时指示按钮处于活动状态。然而,我得到了意想不到的令牌,错误... 但当我尝试将属性放在前面时,例如: 它传递语法错误并显示良好,但这不是我想要实现的。 我怎样才能解决这个问题?它没有通过的原因是什么? 因此,我刚刚发现在中,属性是的缩写,因此我使用 所以如果有人遇到这个问题,我就把它留在这
假设我们有一个简单的Spring条件,它必须与属性文件中的文件属性相匹配: 不幸的是,上面提到的方法调用都没有返回在属性文件中定义的真实属性。相反,当我为另外两个调用getProperty方法和“${my.property}”字符串时,我得到了null(显然,该属性尚未解析)。
为什么需要这样AddDataType<'AlarmTips'> 才能正确获取类型? 不是已经使用 <T>进行关联了吗?
我有一个bean,我必须自己创建它(使用),它有和注释。 如何让Spring处理我的bean中的这些注释? 相关问题: 在Spring,我可以从自动编织的豆子里自动编织新的豆子吗?
我是Spring的新手,我正在尝试自动连接一个通用DAO。不幸的是,我遇到了一个错误。我试图根据它搜索信息,但大多数解决方案都声明使用@Qualifier注释,我认为这与我想要实现的目标背道而驰。 所以下面的一些代码(我将摆脱类参数,一旦我处理当前问题): 道 服务 和下面抛出的错误:
问题内容: 我正在使用Tire进行elasticsearch。在我的应用程序中,我有2个模型。价格和产品。 我正在尝试搜索我的Price类,并在搜索字段中使用它所属的产品的属性。现在,如果我有一个名为的产品,并输入“ pro”,“ prod”或“ duct”,则没有结果。但是键入“产品”或“产品”会显示结果。我相信问题出在我的地图上。我查看了查询及其: 我认为应该是: 从以下问题 我不知道该如何使