0

Grails 프레임 워크에서 작업하고 있습니다. 내가 도메인 클래스 메소드를 Grails의 방법 동적Grails는 도메인 클래스에 대해 자동으로/동적으로 메소드를 생성하는 방법을 가르 칩니까?

수, countBy, createCriteria, 삭제, 폐기, 오류, 하는 executeQuery 같은 Grails 애플리케이션의 각 도메인 클래스에 대해 생성하는 것이 궁금, executeUpdate의는 존재 , 의 fetchMode, 발견, findall은, findAllBy, findAllWhere, findBy, findOrCreateBy, findOrCreateWhere,,findOrSaveBy, findOrSaveWhere, findWhere, 를 getAll, 얻을, 첫째, getDirtyPropertyNames, getPersistentValue, hasErrors, hasMany의, hasOne의, 답하라, instanceof를, isAttached, IsDirty 사용, 마지막으로, 목록 , listOrderBy, 로드, 잠금, 병합, 읽기, 새로 고침, 는을 저장검증 , withCriteria, withNewSession, withSession, withTransaction는metaprogramming를 통해 이루어집니다

답변

-1

, 동적 모든 클래스에 메서드와 속성을 추가 할 수 있습니다.

SomeClass.metaClass.newMethod = {-> // do my stuff here } 

동일한 클래스에 동일한 메서드를 추가하려는 다른 라이브러리와의 충돌을 피하기 위해이 태그를 보수적으로 사용해야합니다.

희망이 도움이됩니다.

0

Grails 3.x에서는 메타 클래스를 사용하여 도메인 클래스를 확장하지 않습니다. 나는 그들이 AST를 대신 사용한다고 생각한다.

+0

"Grails 3.x에서는 메타 클래스가 도메인 클래스를 확장하는 데 사용되지 않습니다." - 그건 사실이 아닙니다. 우리는 여전히 컴파일 타임에 조작 할 수없는 동적 파인더 (dynamic finder)와 같은 것들에 대해 런타임 메타 프로그래밍을 사용합니다. 런타임 메타 프로그래밍으로 수행 되곤했던 많은 다른 것들이 특성 기반 솔루션이나 커스텀 AST 변환으로 대체되었지만, 런타임 메타 프로그래밍은 여전히 ​​Grails 3에서 사용됩니다. –

0

Grails의 최신 버전에서 질문에 언급 된 방법은 Grails가 Groovy 도메인 클래스에 자동으로 추가하는 특성으로 정의된다. https://github.com/grails/grails-data-mapping/blob/9c66dbfdec33311d768fc230e704150d213e87ab/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy을 참조하십시오. 예를 들어 count() 메서드는 https://github.com/grails/grails-data-mapping/blob/9c66dbfdec33311d768fc230e704150d213e87ab/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy#L620으로 정의됩니다.

도움이 되었기를 바랍니다.

관련 문제