【问题标题】:Convert application context to Java Config Springboot将应用程序上下文转换为 Java Config Spring Boot
【发布时间】:2021-11-02 23:02:49
【问题描述】:

寻找一些关于将现有 applicationContext.xml 中的以下转换为新 Springboot 应用程序的 Java Config 的指导。

<bean id="InitialHandler" class="package.InitialHandler" 
  scope="prototype">
  <property name="rawResponseTemplate" 
   ref="rawResponseRestTemplate"/>
  <property name="mimeMapper" ref="initialMimeMapper"/>
</bean>

<bean id="rawResponseRestTemplate" 
   class="org.springframework.web.client.RestTemplate">
  <property name="messageConverters">
    <list>
        <bean class="package.CommonDocumentRawMessageConverter"/>
    </list>
  </property>
</bean>

<bean id="initialMimeMapper" 
class="package.ConfigurationBasedMapper">
  <property name="configuration" ref="initialMimeConfig"/>
</bean>

<bean id="initialMimeConfig" 
class="org.apache.commons.configuration.XMLPropertiesConfiguration" 
scope="singleton">
  <constructor-arg type="java.net.URL" 
 value="classpath:FileINeedLoaded.xml"/>
  <property name="reloadingStrategy" ref="ReloadingStrategy"/>
</bean>

// snippet of CommonDocumentRawMessageConverter below
import org.springframework.http.converter.HttpMessageConverter;
public class CommonDocumentRawMessageConverter implements 
  HttpMessageConverter<CommonDocument>  {}

这就是我所拥有的:

@Bean
public RestTemplate rawResponseRestTemplate() {
    RestTemplate rawResponseRestTemplate = new RestTemplate();
    rawResponseRestTemplate.setMessageConverters(msgConverters());    
    return rawResponseRestTemplate;
}

private List<HttpMessageConverter<?>> msgConverters() {
    List<HttpMessageConverter<?>> newList = new ArrayList<HttpMessageConverter<?>>();
    newList.add(new CommonDocumentRawMessageConverter());
    return newList;
}

服务编译正常,但运行时异常如下:

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'prop.mime-mapper' to 
package.util.Mapper<java.lang.String>:

Property: prop.mime-mapper
Value: propMimeMapper
Origin: "prop.mimeMapper" from property source "Config resource 'class 
path resource [application.yml]' via location 'optional:classpath:/' 
(document #0)"
Reason: org.springframework.core.convert.ConverterNotFoundException: No 
converter found capable of converting from type [java.lang.String] to 
type [package.util.Mapper<java.lang.String>]

Action:

Update your application's configuration

我的配置片段:

@Getter
@Setter
public class propConfig {
   private String randomProp;
   private Mapper<String> mimeMapper;
   private RestTemplate rawResponseTemplate;

服务:

@Slf4j
@Service
public class PropService extends DocumentManagementService {

private final RestTemplate rawResponseTemplate;
private final Mapper<String> mimeMapper;

public PropService(@Autowired PropConfig propConfig) {
    this.rawResponseTemplate = propConfig.getRawResponseTemplate();
    this.mimeMapper = propConfig.getMimeMapper();
}

似乎在运行时定义为 RestTemplate 和 Mapper 的属性由于某种原因没有得到转换。

更新一个 我可以通过从 application.yaml 中完全删除这些属性来解决上述问题。

private Mapper<String> mimeMapper;
private RestTemplate rawResponseTemplate;

我意识到这些属性实际上是原始 applicationContext.xml 中的“引用”,因此在新的 application.yaml 中不需要。我确实有新问题,但与此转换相关,我将分享。我会保留原始配置,以防其他人遇到同样的问题。

【问题讨论】:

  • &lt;bean&gt; 标签可能只是您的 Converter 标签中带注释的 @bean(即 SpringBean) - 请参阅 baeldung.com/spring-bean
  • 感谢您的快速回复。不知道你的意思,看起来怎么样?
  • XML 中的 bean 可以替换为 java (spring) bean(根据链接注释) - 如果您需要更多,最好在您的问题中添加更多详细信息。您还可以搜索 spring beans 示例以获取有关如何操作的示例
  • 感谢在线阅读资源,但看不到任何包含包含 bean 列表的属性的 bean,因此即使编译正常,也不确定上述是否正确。更新了帖子并提出了建议。
  • 更新后的更改乍一看还不错,但我没有时间创建一个迷你项目并编译它,看看它是否有效。我注意到的一件事是您没有为 CommonDocumentRawMessageConverter 声明一个 bean - 是在包或代码中的其他地方定义的吗?

标签: spring spring-boot applicationcontext


【解决方案1】:

我能够通过从 application.yaml 中完全删除这些属性来解决上述问题。

private Mapper<String> mimeMapper;
private RestTemplate rawResponseTemplate;

我意识到这些属性实际上是原始 applicationContext.xml 中的“引用”,因此在新的 application.yaml 中不需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2017-03-11
    • 1970-01-01
    • 2019-08-13
    • 2016-12-17
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多