有人可以告诉我如何让spring注入工作在资源配置中注册的Controller类:
ResourceConfig resourceConfig = new ResourceConfig(controllerClasses);
我包含像这样的弹簧上下文:
private void mergeSpringContext(ResourceConfig resourceConfig) {
ContextConfiguration annotation = getClass().getAnnotation(ContextConfiguration.class);
if(annotation != null) {
Class<?>[] contextClasses = annotation.classes();
// ApplicationContext context = new AnnotationConfigApplicationContext(contextClasses);
// resourceConfig.property("contextConfig", context);
resourceConfig.registerClasses(contextClasses);
}
}
你可以看到两种方法但不起作用。 Jersey-test总是创建一个控制器的新实例,而spring无法知道它。有没有办法让jersey使用spring-instantiated控制器(管理并将设置所有字段)bean?或者我必须让自己陷入使用某些AOP(控制器类上的@Configurable)的麻烦。
有一种叫做
的东西jersey-spring3
它应该这样做。我认为这样做但不是我想要的方式 - 它在我的类路径上搜索applicationContext.xml。这不是我想要的,因为它是测试用于指定要加载的弹簧上下文的测试用例。
谢谢!
//编辑
我设法在我的应用程序中使用spring-instantiated控制器,如下所示:
private void mergeSpringContext(ResourceConfig resourceConfig) {
ContextConfiguration annotation = getClass().getAnnotation(ContextConfiguration.class);
if(annotation != null) {
Class<?>[] contextClasses = annotation.classes();
ApplicationContext context = new AnnotationConfigApplicationContext(contextClasses);
Map<String, Object> beansOfType = context.getBeansWithAnnotation(Controller.class);
Collection<Object> controllers = beansOfType.values();
resourceConfig.registerInstances(controllers.toArray());
}
}
问题在于我仍然不知道如何将弹簧安全放在那里......
答案 0 :(得分:0)
我们的确有所不同。
在我们的WebAppInit中,我们有:
ResourceConfig resourceConfig = new ResourceConfig()
.packages(
'foo.package1',
'foo.package2'
)
然后是RootConfig
@Configuration
@EnableCaching
@ComponentScan(basePackages = [
然后每个注射用@Named注释,每次使用@Inject
祝你好运