ali*_*ele 4 configuration resources spring classpath spring-annotations
我想在spring配置中配置推土机.当使用xml配置时,它就像
<bean class="org.dozer.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles" value="classpath*:dozer/**/*.dzr.xml"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
如何在配置文件中定义资源.我尝试使用ctx.getResource()但我无法访问Configuration类中的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
还尝试使用ClassPathResource但无法找到正确的方法
DozerBeanMapperFactoryBean mapper = new DozerBeanMapperFactoryBean();
mapper.setMappingFiles(new Resource[]{new ClassPathResource("classpath*:dozer/**/*.dzr.xml")});
return mapper;
Run Code Online (Sandbox Code Playgroud)
如何将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;
}
Run Code Online (Sandbox Code Playgroud)
你需要用a ResourcePatternResolver来翻译classpath*:dozer/**/*.dzr.xml成一个Resource[].您可以使用2种主要选项.
ApplicationContext配置类,将其强制转换为a ResourcePatternResolver并使用该getResources方法.Al Spring默认应用程序上下文实现实现了该ResourcePatternResolver接口.PathMatchingResourcePatternResolver使用或不使用前面提到的上下文创建一个.ResourcePatternUtils注射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;
}
}
Run Code Online (Sandbox Code Playgroud)
最后一种方法的优点是你不仅仅依赖于PathMatchingResourcePatternResolver界面.实用程序类根据注入的ResourceLoader内容确定它.人们应该更喜欢这种加载资源的方式.
使用ApplicationContext
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想重用已经存在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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5981 次 |
| 最近记录: |