Let’s say you have two services named UserService and both are included in your Grails classpath. This can happen, for example if you have a “core” package, and an “application” package that extends services from “core”.
Here’s what that might look like in our case:
Well, if you try to use “UserService” in your Grails application like so, you will get an error saying that UserService cannot be found.
def userService
That’s because there was a name collision on UserService.
Spring accounts for this, and allows you to define your class for each bean name. In Grails, we can define our beans in the grails-app/conf/resources.groovy file.
Here’s an example of what our resources.groovy file would look like:
beans = { // syntax is beanId(implementingClassName) { properties } // User Service coreUserService(com.company.core.UserService) { grailsApplication = ref("grailsApplication") } userService(com.company.usecase.UserService) { coreUserService = ref("coreUserService") } }
Then, in your services, you can inject these services like so:
class UserController { def userService ... } // From your UserService, you can access the core UserService like this. package com.company.core.UserService class UserService { def coreUserService ... }
Hopefully, that helps.