来自 bean 的 JavaEE 扫描注释
JavaEE scan annotation from bean
我在我的项目中使用 javaee 8 并且有这个 类 :
public class PersonRepository {
@Inject
@Mongo(collection = "users")
private MongoCollection collection;
// define some methods ....
}
@ApplicationScoped
public class MongoProducer {
@Inject
private MongoClient mongoClient;
@Produces
@Mongo
protected MongoCollection produceCollection(InjectionPoint ip) {
Mongo mongo = getMongoAnnotation(ip);
return mongoClient.getDatabase("sample").getCollection(mongo.collection());
}
private Mongo getMongoAnnotation(InjectionPoint ip) {
return ip.getAnnotated().getAnnotation(Mongo.class);
}
}
@MongoClientDefinition(
name = "mongoClient",
dbName = "sample",
username = "admin",
password = "adminpass"
)
public class MongoConnectionConfig {
}
不幸的是,mongoClient 没有任何方法来获取当前连接到它的数据库名称。 (也许我找不到!)
如何从 produceCollection 方法扫描 MongoClientDefinition 注释?
我想从该注释中设置数据库名称。 (替换 "sample").
注意:我为 MongoClientDefinition 创建了 CDI 扩展。
简单的想法是 BeanManager :
我修改了扩展名并为 dbName 添加了 getter 方法。
github
上的完整项目
@ApplicationScoped
public class MongoProducer {
@Inject
private MongoClient mongoClient;
@Inject
private BeanManager bm;
@Produces
@Mongo
protected MongoCollection produceCollection(InjectionPoint ip) {
String dbName = bm.getExtension(MongoClientExtension.class).getDatabaseName();
Mongo mongo = getMongoAnnotation(ip);
return mongoClient.getDatabase(dbName).getCollection(collectionName,mongo.collection());
}
private Mongo getMongoAnnotation(InjectionPoint ip) {
return ip.getAnnotated().getAnnotation(Mongo.class);
}
}
我在我的项目中使用 javaee 8 并且有这个 类 :
public class PersonRepository {
@Inject
@Mongo(collection = "users")
private MongoCollection collection;
// define some methods ....
}
@ApplicationScoped
public class MongoProducer {
@Inject
private MongoClient mongoClient;
@Produces
@Mongo
protected MongoCollection produceCollection(InjectionPoint ip) {
Mongo mongo = getMongoAnnotation(ip);
return mongoClient.getDatabase("sample").getCollection(mongo.collection());
}
private Mongo getMongoAnnotation(InjectionPoint ip) {
return ip.getAnnotated().getAnnotation(Mongo.class);
}
}
@MongoClientDefinition(
name = "mongoClient",
dbName = "sample",
username = "admin",
password = "adminpass"
)
public class MongoConnectionConfig {
}
不幸的是,mongoClient 没有任何方法来获取当前连接到它的数据库名称。 (也许我找不到!)
如何从 produceCollection 方法扫描 MongoClientDefinition 注释?
我想从该注释中设置数据库名称。 (替换 "sample").
注意:我为 MongoClientDefinition 创建了 CDI 扩展。
简单的想法是 BeanManager :
我修改了扩展名并为 dbName 添加了 getter 方法。
github
@ApplicationScoped
public class MongoProducer {
@Inject
private MongoClient mongoClient;
@Inject
private BeanManager bm;
@Produces
@Mongo
protected MongoCollection produceCollection(InjectionPoint ip) {
String dbName = bm.getExtension(MongoClientExtension.class).getDatabaseName();
Mongo mongo = getMongoAnnotation(ip);
return mongoClient.getDatabase(dbName).getCollection(collectionName,mongo.collection());
}
private Mongo getMongoAnnotation(InjectionPoint ip) {
return ip.getAnnotated().getAnnotation(Mongo.class);
}
}