从 grails 3.2 升级到 grails 3.3,GrailsDomainClass Api 已弃用

Upgrade from grails 3.2 to grails 3.3, GrailsDomainClass Api Deprecated

我进行了以下替换以将我的应用程序和插件升级到 grails 3.3。 (变量名称更改是为了提高替换的清晰度。)

Grails 3.2:

Class<?> clazz = grailsDomainClass.clazz
...

def grailsDomainClass = new DefaultGrailsDomainClass(clazz)
...

GrailsDomainClassProperty[] properties = grailsDomainClass.properties
...

def propertyName = grailsDomainClass.propertyName
...

def referenceType = grailsDomainClassProperty.referencedPropertyType
...

Grails 3.3:

Class<?> clazz = persistentEntity.javaClass
...

def persistentEntity = grailsApplication.mappingContext.getPersistentEntity(DomainClass.class.name)
...

PersistentProperty[] properties = persistentEntity.persistentProperties
...

def propertyName = persistentEntity.decapitalizedName
...

def referenceType = persistentProperty.type

其他更改在 Grails 3.3 man

不清楚是:

  1. 用什么代替:

    grailsDomainClass.getPropertyValue(propertyName)
    
  2. 我应该把 doWithSpring 中的代码放在插件的什么地方?

手册页说:

The solution is to move any logic that executes before the context is available to somewhere else that executes after the context is available.

还有别的地方吗?是否有 doWithContext 关闭?可以用来注入bean吗?

  1. 使用ClassPropertyFetcher.getPropertyValue方法

  2. doWithApplicationContext 是一种可用于覆盖插件的方法,您可以在其中放置逻辑。