【发布时间】:2021-12-02 03:25:22
【问题描述】:
我有一个服务接口Logger和一个服务工厂
interface LoggerFactory {
Logger createLogger(String name)
}
我的组件是这样使用它的:
@Component
public class User {
private Logger logger;
@Activate
public User(@Reference LoggerFactory loggerFactory) {
logger = loggerFactory.create("user")
}
}
我想摆脱LoggerFactory,而是能够像这样检索我的记录器:
@Component
public class User {
@Reference(target = "(name=user)")
private Logger logger;
}
我尝试制作 Logger 实现原型,但 SCR 没有按预期创建记录器。是不是因为工厂组件总是需要来自 ConfigAdmin 的 configurationPID?
我还尝试通过捆绑上下文显式为 Logger 接口注册 PrototypeServiceFactory,但没有成功。
我的印象是这必须以某种方式与声明式服务一起工作,因为另一个用例适合这种模式,所以这似乎是一个常见问题:许多组件使用 http 服务但端口不同。我想使用目标过滤器作为参考,而不是我的自定义工厂。
1.) 我怎样才能做到这一点?
2.) 如果这不可能,是否有替代方案?就像拥有其他类型的服务工厂一样,它使用组件名称作为记录器名称?
3.) 如果这能以某种方式工作,我可以将目标过滤器设为可选,这样它就不会选择随机记录器,而是选择使用组件名称的记录器?
【问题讨论】: