我正在使用 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 在绑定期间为我的工厂提供定位器。
我真的很感激任何建议和建议。我希望我不是第一个想要统一代理我的服务的人。