如何处理域类中外部存储的默认值

发布于 2024-11-25 09:50:56 字数 311 浏览 1 评论 0原文

我希望能够为我的域类中的某些字段设置默认值。 到目前为止,我有一个类存储了整个项目的设置映射,并考虑了将此映射移动到 Redis 数据库中的任务。 这一天已经到来,我将所有数据移至 redis 并创建了一个漂亮的 spring bean 来获取/设置值。 然而... 看来默认值是在注入 bean 之前在域类实例上设置的。 这破坏了整个过程。 另外...单元测试存在问题。 我创建了一个类,它实现与 spring bean 相同的接口并保存测试值。我想将它注入到域类中,但这也失败了。

因此,现在我正在尝试找到一种好方法来处理我的域类的外部存储的默认值,并能够运行单元测试。 有什么想法吗?

I want to be able to set default values for some fields in my domain classes.
Till now I had a class which stored a Map of settings for my whole project, with a task in mind to move this map into a redis database.
The day has come and I moved all the data to redis and created a nice spring bean to get/set the values.
However...
it seems that default values are set on the domain class instance before bean is injected.
This kind of breaks the whole process.
Also... there's an issue with unit tests.
I've created a class which implements the same interface as the spring bean and holds test values. I wanted to inject it into domain classes, but this fails as well.

So right now I'm trying to find a good way to handle externally stored defauls values for my domain classes with ability to run unit tests.
Any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北音执念 2024-12-02 09:50:56

您可以采取几种不同的方法:

  • 引入一个具有默认值的单独 bean,以便以与以前相同的方式提供这些值。在单独的更高级别上下文中或稍后在应用程序启动时,您可以使用从数据库中提取的 bean 定义来覆盖 bean 定义
  • 使用 BeanPostProcessor 或 BeanFactoryPostProcessor 指定默认值,然后使用新 bean 检索新值

如果两者都不是这些答案很有帮助,请发布您的设置和示例代码,以便我可以更清楚地了解您想要做什么。

There are a few different approaches you could take:

  • Introduce a separate bean with the default values so that those are supplied in the same way as they were before. In a separate higher level context or later on in application startup, you could then override the bean definition with the one that pulls from the database
  • Use a BeanPostProcessor or BeanFactoryPostProcessor to specify the default values, then use your new bean for retrieving new values

If neither of these answers is helpful, please post your setup and example code so I can get a clearer picture of what you're trying to do.

吃→可爱长大的 2024-12-02 09:50:56

我最后做了什么:
我创建了一个连接到 Redis 并获取我需要的所有数据的类。
为了进行单元测试,我创建了此类的副本,它实现了相同的接口,但不是从 Redis 获取数据,而是内部有一个简单的 Map 并从那里获取数据。最终它的行为是一样的,但是数据是在内部存储的。因此,在我的单元测试中,我只是在适当的情况下注入此类的单元测试版本。

可能不是最好的解决方案,但它在过去几个月对我有用。

What I did in the end:
I've created a class which is connecting to Redis and gets me all the data I require.
For unit testing I've created a copy of this class, it implements the same interface but instead of getting the data from Redis it has a simple Map inside and get's the data from there. In the end it acts the same, but the data is stored internally. So in my unit tests I just inject this Unit test version of this class where appropriate.

Probably not the best solution there is but it worked for me for the last few months.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文