1

我正在使用 Jersey 2.x 和内置于 Jersey 中的 HK2。我需要在我的服务中装饰一些由注释标记的方法,即我想在这些方法调用之前和之后执行一些额外的操作。不幸的是,HK2 没有任何 AOP 功能。我认为我可以将我的工厂绑定到服务的接口,并在provide调用工厂的方法时创建服务的代理。但是,我的工厂需要做几件事才能工作:

1)服务的类和接口创建代理

2)ServiceLocator实例正确注入所有服务的依赖项

而且我只是看不出有什么办法可以两者兼得。如果我使用绑定工厂,bindFactory(MyFactory.class)那么我无法将有关服务的信息传递给它,但可以将 ServiceLocator 实例注入其中。如果我使用绑定工厂,bindFactory(new MyFactory(Service.class, ServiceImpl.class))那么我有关于服务的信息,但我没有ServiceLocator实例来正确创建该服务,因为 HK2 没有向工厂实例注入任何东西,而且我也看不到从中获取 ServiceLocator 实例AbstractBinder 在绑定期间为我的工厂提供定位器。

我真的很感激任何建议和建议。我希望我不是第一个想要统一代理我的服务的人。

4

1 回答 1

0

在最新版本的 hk2 (2.2.0-b25) 中,我们添加了将 AOP 联盟拦截器添加到任何方法的功能。但是这个特性还没有完全成熟(我们将添加构造函数注入)并且还没有完全记录。但是您可能想开始使用它,因为它使您能够将 AOP MethodInterceptors 添加到服务上的任何方法中。

于 2013-12-04T23:10:10.570 回答