필자는 이전에 Grails 서비스를 사용해 본 적이 없었지만 웹 검색 결과에 따라 도메인 객체에 주입 할 수 있습니다. 나는 다음과 같은 도메인 클래스가 있다면 나는 Book
객체가 def book = new Book()
, book.bookService
설정해야 사용하여 인스턴스화 할 때,,Grails 도메인 객체에 서비스와 유사한 컴포넌트를 삽입하려면 어떻게해야합니까?
class Book {
BookService bookService
}
을 (BookService
어딘가에 정의되어 있다고 가정)?
외부 서비스 (또는 서비스와 유사한 구성 요소)를 주입하려면 어떻게해야합니까? 예를 들어, 사용 가능한 ISBN API 클라이언트가 있다면 grails에 같은 방식으로 삽입 할 수 있습니까? 예를 들어 클라이언트가 IsbnApi
이라면 다른 서비스처럼 자동으로 주입 할 수 있습니까? 아래의 코드가 작동합니까? 이 질문에 대한 이전 응답에 따라
class Book {
@Transient
@Autowire
IsbnApi isbnApi
}
, 난 이미 도메인 클래스 이런 식으로 정의했습니다 : 이제
class Book {
static transients = ['isbnApi']
IsbnApi isbnApi
}
, 이것은 내가 원하는 모든 것을 할 수있다, 그러나 나는 또한 테스트 할 자동 주입은 심지어 을 응용 프로그램을 실행하지 않고도 작동 할 것이라고. 유닛 테스트에서 모의 "서비스"를 수동으로 설정해야합니다.
IsbnApi isbnApi = Mock()
Book book = new Book()
book.isbnApi = mockIsbnApi
난
test/integration
에 테스트를 이동하여 자동 주입을 확인하려하고
doWithSpring
을 사용하여 콩 세트.
def doWithSpring() {
isbnApi = (InstanceFactoryBean, mockIsbnApi, isbnApi)
}
void "test automatic injection"() {
given:
IsbnApi isbnApi = Mock()
Book book = new Book()
//removed: book.isbnApi = mockIsbnApi
expect:
book.isbnApi //this fails
}
나는 또한 this answer to a similar question에서 추가 정보를 발견했다. 특히, 당신이 '데프'를 사용하고 있기 때문에 당신이 과도에 추가 할 필요가 없습니다
참고을 나열합니다. 정적 메서드에서 액세스하려고합니까? 인스턴스 필드이므로 인스턴스에서만 액세스 할 수 있습니다.
을 참조하십시오 어디 IsbnApi 저장됩니까? 그루비/src? –
그것은 어디에서든지 : src/groovy' 또는 다른 jar 등등 일 수 있습니다. –