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

Spring 如何处理域类中外部存储的默认值,spring,grails,groovy,default-value,grails-domain-class,Spring,Grails,Groovy,Default Value,Grails Domain Class,我希望能够为域类中的某些字段设置默认值。 到目前为止,我有一个类,它为我的整个项目存储了一个设置地图,我的任务是将这个地图移动到redis数据库中。 这一天到了,我将所有数据移动到redis,并创建了一个很好的Springbean来获取/设置值。 然而 在注入bean之前,似乎在域类实例上设置了默认值。 这种做法破坏了整个过程。 而且单元测试有一个问题。 我创建了一个类,它实现了与Springbean相同的接口,并保存测试值。我想把它注入域类,但这也失败了 因此,现在我正试图找到一种好方法来处理

我希望能够为域类中的某些字段设置默认值。 到目前为止,我有一个类,它为我的整个项目存储了一个设置地图,我的任务是将这个地图移动到redis数据库中。 这一天到了,我将所有数据移动到redis,并创建了一个很好的Springbean来获取/设置值。 然而 在注入bean之前,似乎在域类实例上设置了默认值。 这种做法破坏了整个过程。 而且单元测试有一个问题。 我创建了一个类,它实现了与Springbean相同的接口,并保存测试值。我想把它注入域类,但这也失败了

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

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

引入一个带有默认值的单独bean,以便以与以前相同的方式提供这些值。在单独的更高级别上下文中或稍后在应用程序启动时,您可以使用从数据库提取的bean定义覆盖bean定义 使用BeanPostProcessor或BeanFactoryPostProcessor指定默认值,然后使用新bean检索新值
如果这两个答案都没有帮助,请发布您的设置和示例代码,以便我能更清楚地了解您正在尝试做什么。

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

引入一个带有默认值的单独bean,以便以与以前相同的方式提供这些值。在单独的更高级别上下文中或稍后在应用程序启动时,您可以使用从数据库提取的bean定义覆盖bean定义 使用BeanPostProcessor或BeanFactoryPostProcessor指定默认值,然后使用新bean检索新值 如果这两个答案都没有帮助,请发布您的设置和示例代码,以便我能更清楚地了解您正在尝试做什么。

我最后做了什么: 我已经创建了一个连接到Redis的类,并获得了我需要的所有数据。 对于单元测试,我创建了这个类的一个副本,它实现了相同的接口,但是它没有从Redis获取数据,而是在里面有一个简单的映射,从那里获取数据。最后,它的作用是相同的,但数据存储在内部。所以在我的单元测试中,我只是在适当的地方注入这个类的单元测试版本

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

我最后做了什么: 我已经创建了一个连接到Redis的类,并获得了我需要的所有数据。 对于单元测试,我创建了这个类的一个副本,它实现了相同的接口,但是它没有从Redis获取数据,而是在里面有一个简单的映射,从那里获取数据。最后,它的作用是相同的,但数据存储在内部。所以在我的单元测试中,我只是在适当的地方注入这个类的单元测试版本


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

因此我尝试在beforeInsert事件中设置默认值,但它是在事务结束后设置的,因此在控制器中渲染后设置。这使得它无法使用。你能详细说明你在外部存储域类默认值的动机吗?您的主要用例是否能够运行单元测试?我这样做是为了能够在应用程序运行时轻松更改数据,而不牺牲性能[我相信是这样]。因此,我尝试在beforeInsert事件中设置默认值,但它是在事务结束后设置的,因此是在控制器中呈现后设置的。这使得它无法使用。你能详细说明你在外部存储域类默认值的动机吗?您的主要用例是运行单元测试的能力吗?我这样做是为了能够在应用程序运行时轻松更改数据,而不牺牲性能[我相信是这样]。