我正在使用内置于泽西岛的Jersey 2.x和HK2。
我需要在注释标记的服务中修饰某些方法,即我想在这些方法调用之前和之后执行一些额外的操作。不幸的是,HK2没有任何AOP功能。我认为我可以将我的工厂绑定到服务的接口,并在调用工厂的provide
方法时创建服务的代理。但是,我需要向工厂提供一些工作:
1)服务的类和接口创建代理
2)ServiceLocator
实例正确地注入所有服务的依赖项
我只是没有办法让两者都有。如果我使用bindFactory(MyFactory.class)
绑定工厂,那么我无法将有关服务的信息传递给它,但可以将ServiceLocator实例注入其中。如果我使用bindFactory(new MyFactory(Service.class, ServiceImpl.class))
绑定工厂,那么我有关于服务的信息,但是我没有ServiceLocator
实例来正确创建该服务,因为HK2没有向工厂实例中注入任何内容而我没有无论如何都要从AbstractBinder中获取ServiceLocator实例,以便在绑定期间为我的工厂提供定位器。
我真的很感激任何建议和建议。我希望我不是第一个想要统一代理我的服务的人。
答案 0 :(得分:0)
在最新版本的hk2(2.2.0-b25)中,我们添加了向任何方法添加AOP联盟拦截器的功能。但是这个功能尚未完全出炉(我们将添加构造函数注入)并且尚未完全记录。但您可能想开始使用它,因为它可以让您将AOP MethodInterceptors添加到服务的任何方法中。