How to declare a respository populator bean using java config instead of XML?(如何使用 java config 而不是 XML 声明一个存储库填充器 bean?)
问题描述
我正在开发一个基于 Spring 的项目,该项目(到目前为止)完全没有 XML,但现在我在 Spring JPA 存储库填充器上遇到了困难:
I am working on a Spring based project that is (so-far) completely XML-free, except now I've hit a wall with the Spring JPA repository populator:
<repository:jackson-populator location="classpath:data.json" />
如何在 java @Configuration 类中表达以上内容?
How would the above be expressed in a java @Configuration class?
这篇文章建议直接使用 FactoryBean:https://stackoverflow.com/a/13566712/1746274
This post suggests using the FactoryBean directly: https://stackoverflow.com/a/13566712/1746274
我试过了,我得到的最接近的是以下,但它不太正确.
I tried that and the closest I got was the following but it's not quite right.
@Bean(name="repositoryPopulator")
public RepositoryPopulator getRespositoryPopulator() throws Exception {
final JacksonRepositoryPopulatorFactoryBean factory = new JacksonRepositoryPopulatorFactoryBean();
factory.getObject().setResourceLocation("classpath:test-data.json");
factory.afterPropertiesSet();
return factory.getObject();
}
上述结果导致 FactoryBeanNotInitializedException
消息 JacksonRepositoryPopulatorFactoryBean 不支持循环引用
.
The above results in a FactoryBeanNotInitializedException
with the message JacksonRepositoryPopulatorFactoryBean does not support circular references
.
有什么想法吗?
推荐答案
其实很简单:
@Configuration
class ApplicationConfig {
@Bean
public JacksonRepositoryPopulatorFactoryBean repositoryPopulator() {
Resource sourceData = new ClassPathResource("test-data.json");
JacksonRepositoryPopulatorFactoryBean factory = new JacksonRepositoryPopulatorFactoryBean();
// Set a custom ObjectMapper if Jackson customization is needed
factory.setObjectMapper(…);
factory.setResources(new Resource[] { sourceData });
return factory;
}
}
通过返回 FactoryBean
本身,Spring 将负责调用所有必要的回调接口(即 setApplicationContext(…)
、setBeanClassLoader(…)代码>等).工厂 bean 是一个
ApplicationListener
,因此将在 ApplicationContext
完全初始化时侦听 ContextRefreshedEvent
并触发填充.
By returning the FactoryBean
itself, Spring will take care of invoking all the necessarry callback interfaces (i.e. setApplicationContext(…)
, setBeanClassLoader(…)
etc.). The factory bean is an ApplicationListener
and thus will listen to the ContextRefreshedEvent
and trigger population when the ApplicationContext
is fully initialized.
这篇关于如何使用 java config 而不是 XML 声明一个存储库填充器 bean?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用 java config 而不是 XML 声明一个存储库填充器 bean?


基础教程推荐
- Java:带有char数组的println给出乱码 2022-01-01
- 降序排序:Java Map 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01