在spring配置文件中设置资源

2024-01-06

我正在尝试在弹簧配置中配置推土机。当使用 xml 配置时,它会像

<bean class="org.dozer.spring.DozerBeanMapperFactoryBean">
    <property name="mappingFiles" value="classpath*:dozer/**/*.dzr.xml"/>
</bean>

我如何在配置文件中定义资源。我尝试使用ctx.getResource()但我无法访问配置类中的ApplicationContext。

我尝试了 ContextRefreshedEvent 并从那里添加资源,但仍然没有运气。 (afterPropertiesSet 已被调用,添加的映射将不起作用)

public class ContextRefreshedEventBuilder extends ContextRefreshedEvent {
public ContextRefreshedEventBuilder(ApplicationContext ctx) {
    super(ctx);
    DozerBeanMapperFactoryBean mapper = ctx.getBean(DozerBeanMapperFactoryBean.class);
    try {
        mapper.setMappingFiles(ctx.getResources("classpath*:dozer/**/*.dzr.xml"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

也尝试使用 ClassPathResource 但找不到正确的方法

DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
mapper.setMappingFiles(new Resource[]{new ClassPathResource("classpath*:dozer/**/*.dzr.xml")});
return mapper;

如何添加 ClassPathResource 作为映射位置?

- -回答 - -

@Bean
public DozerBeanMapperFactoryBean configDozer() throws IOException {
    DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
    Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:dozer/**/*.dzr.xml");
    mapper.setMappingFiles(resources);
    return mapper;
}

你需要使用一个ResourcePatternResolver http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/io/support/ResourcePatternResolver.html翻译classpath*:dozer/**/*.dzr.xml into a Resource[]。您可以使用 2 个主要选项。

  1. 注入ApplicationContext到你的配置类中,将其转换为ResourcePatternResolver并使用getResources方法。 Al Spring 默认应用程序上下文实现实现了ResourcePatternResolver界面。
  2. 创建一个PathMatchingResourcePatternResolver有或没有前面提到的上下文。
  3. Use the ResourcePatternUtils http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/io/support/ResourcePatternUtils.html与注射的ResourceLoader.

使用 ResourcePatternUtils

@Configuration
public class MyConfiguration {

    @Autowired
    private ResourceLoader resourceLoader;

    public DozerBeanMapperFactoryBean mapper() throws IOException {
        DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
        // ResourceLoader is allowed to be null when using the ResourceLoaderUtils.
        ResourcePatternResolver resolver = ResourceLoaderUtils.getResourcePatternResolver(resourceLoader);
        Resource[] mappingFiles = resolver.getResources("classpath*:dozer/**/*.dzr.xml");
        mapper.setMappingFiles(mappingFiles);
        return mapper;
    }
}

最后一种方法的优点是您不受束缚PathMatchingResourcePatternResolver但只是界面。实用程序类根据注入来确定ResourceLoader它能做什么。人们应该更喜欢这种加载资源的方式。

使用应用程序上下文

@Configuration
public class MyConfiguration {

    @Autowired
    private ApplicationContext context;

    public DozerBeanMapperFactoryBean mapper() throws IOException {
        DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
        Resource[] mappingFiles = ((ResourcePatternResolver) context).getResources("classpath*:dozer/**/*.dzr.xml");
        mapper.setMappingFiles(mappingFiles);
        return mapper;
    }
}

使用 PathMatchingResourcePatternResolver

@Configuration
public class MyConfiguration {

    private PathMatchingPatternResolver resolver = new PathMatchingPatternResolver();

    public DozerBeanMapperFactoryBean mapper() throws IOException {
        DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
        Resource[] mappingFiles = resolver.getResources("classpath*:dozer/**/*.dzr.xml");
        mapper.setMappingFiles(mappingFiles);
        return mapper;
    }
}

或者如果您想重用已经存在的ResourceLoader略有不同的版本:

@Configuration
public class MyConfiguration {

    @Autowired
    private ResourceLoader resourceLoader;

    public DozerBeanMapperFactoryBean mapper() throws IOException {
        DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
        Resource[] mappingFiles = new PathMatchingPatternResolver(resourceLoader).getResources("classpath*:dozer/**/*.dzr.xml");
        mapper.setMappingFiles(mappingFiles);
        return mapper;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在spring配置文件中设置资源 的相关文章

随机推荐

  • 帮助非 oop 开发人员理解基于接口的编程的最佳类比是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我很难让我的团队适应基于界面的编程 有人有一些建议吗 为了帮助您的团队适应这个想法 最好的方法是演示基于界面的开发可以完成什么 并将其与没有它的
  • 如何使用 zoneID 和 recordID 初始化 CKRecord?

    我目前正在构建一个同步解决方案Core Data记录到CloudKit 我需要帮助才能找出我想要做什么CKRecord是可行的 我检查了 Apple CloudKit 文档 进行了实验并搜索了网络 但没有找到我想要的答案 我想初始化 CKR
  • 如何在 Java 中检查某一天是在本周?

    有没有最简单的方法可以找到本周的任何一天 此函数返回 true 或 false 与给定日期是否在本周相关 您肯定想使用 Calendar 类 http docs oracle com javase 6 docs api java util
  • 即使有前缀,CSS 网格布局也无法在 IE11 中工作

    我正在为我的网格使用以下 HTML 标记 section class grid section
  • 如何在php中使用锚点将数组传递到另一个页面

    我必须使用以下方法将数组值从一个 php 页面传递到另一个 php 页面 a href href 这是我的编码 cluster是一个数组 echo td a href Click here to OFF a td in myebon php
  • .NET 框架是否提供解析 HTML 字符串的方法?

    知道我不能使用 HTMLAgilityPack 只能直接使用 NET 假设我有一个包含一些 HTML 的字符串 我需要以这种方式解析和编辑 通过 id 或标签查找层次结构中的特定控件 修改 最好是创建 这些找到的元素的属性 net 中有可用
  • 使用波形符分隔符将 MSAccess 表导出为 Unicode

    我想从MSAccess2003导出几个表的内容 这些表包含 unicode 日语字符 我想将它们存储为波浪号分隔的文本文件 我可以使用 文件 导出 手动执行此操作 并在 高级 对话框中选择波形符作为字段分隔符 选择 Unicode 作为代码
  • node.js 哈希字符串?

    我有一个想要散列的字符串 在 Node js 中生成哈希值的最简单方法是什么 哈希用于版本控制 而不是安全性 如果你只想对一个简单的字符串进行 md5 哈希 我发现这对我有用 var crypto require crypto var na
  • 仅针对特定元素的 JavaScript SelectionChange 事件

    我想实现一个 JavaScriptselectionchange特定事件div元素 所以如果用户从 DOM 中选择文本 我想显示一个荧光笔框 我已经为网络实现了这个onmouseup事件 但我一直在尝试为移动设备实现这一点 对于移动浏览器我
  • Scala 2.8 CanBuildFrom

    继我问的另一个问题之后 Scala 2 8 突破 https stackoverflow com questions 1715681 scala 2 8 breakout 我想更多地了解一下 Scala 方法TraversableLike
  • C 的 INI 文件解析器

    我需要在 C 中读 写 INI 文件 对我来说有点奇怪的是我找不到任何标准的方法来做到这一点 在 C 中处理 INI 文件的常用方法是什么 我更喜欢平台无关的和 Linux INI 文件解析器库 This link http blog br
  • 删除 SwiperJS 中用数组映射的幻灯片而不重置状态

    我已经为这个问题苦苦挣扎了很长一段时间 但一直无法弄清楚 在这里编写沙箱演示代码 https codesandbox io s swiper remove slides w4gy3 file src App js 我有一组渲染的幻灯片Swi
  • 浅克隆中的“嫁接”提交到底是什么?

    在 git 中进行浅克隆时 使用 depth选项 根提交被标记为grafted 谷歌搜索没有找到任何令人满意的文档 好像没有什么关系git 移植 https git wiki kernel org index php GraftPoint
  • jQuery 数据表行顺序

    dTable periods grid dataTable bProcessing false bPaginate false bDestroy true bFilter false aaData myArray 为什么行顺序混乱 我希望行
  • Google Docs API:文档资源 ID 是否会改变?

    构建一个类似网站的环境 其中所有链接都基于文档中的资源 ID 是否明智 文档 ID 过去是否发生过变化 将来是否会发生变化 上周 我们惊讶地发现一个集合中的某些文档 ID 似乎已更改 这可能吗 id 是条目的唯一 永久标识符 因此它永远不应
  • 使用代理时 Nginx 502 Bad Gateway 错误

    我有一个 Angular 构建和一个 Laravel 后端 提供在一台服务器上运行的 API 我已经在 nginx 中配置了它们 前端有一个到后端服务器的代理 后端在 url 上运行 示例是占位符 http api example com
  • 在react-router v4中使用React IndexRoute

    我正在通过在线教程自己学习 React 这是一个关于使用 React Router 的基本示例
  • SplFileObject 错误无法打开流:没有这样的文件或目录

    我正在尝试在 symfony2 中实现存折网络服务并遵循此存折捆绑 https github com eymengunay PassbookBundle我的控制器看起来像这样 if form gt isValid Create an eve
  • 审计跟踪和实施 SOX/HIPAA/等敏感数据的最佳实践

    我认为自己在应用程序设计方面相对熟练 但我从未接触过敏感数据 我一直想知道审计跟踪的最佳实践是什么以及应该如何实施它们 我现在不必这样做 但如果医疗公司要求我为他们做一些工作 能够自信地与他们交谈 那就太好了 假设我们有一个 学校 数据库
  • 在spring配置文件中设置资源

    我正在尝试在弹簧配置中配置推土机 当使用 xml 配置时 它会像