Да, код на груви, но суть, я думаю, ясна.
У меня есть такой бин для доступа к монго:
@javax.ejb.Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
class MongoResource {
GMongo mongo = null
DB db = null
@Lock(LockType.READ)
def getMongo() {
return mongo
}
@Lock(LockType.READ)
def getDb() {
return db
}
@PostConstruct
public void init() {
mongo = new GMongo()
db = mongo.getDB("dbname")
}
}
Пока что всё это я использую так:
@Path("foo")
class FooRestService {
DBCollection collection
@Inject
def setCollection(MongoResource resource) {
this.collection = resource?.db?.getCollection("foo")
}
@GET
def list() {
def result = collection.find()
// ...
}
}
Я хочу создать аннотацию, чтобы можно было делать так:
@Path("foo")
class FooRestService {
@Mongo(collection = "foo") // Указываем имя коллекции, имя БД по желанию
DBCollection collection
@GET
def list() {
def result = collection.find()
// ...
}
}
Т.е. в аннотацию передаём имя коллекции (имя БД будет одним для приложения, хотя и его можно будет задать), и в поле collection инъектится нужная коллекция.
Есть ли простой способ сделать такую штуку? Смотрел примеры с @Inject и @Produces, но вроде для этого случая это не подходит.