Jersey Test + Spring - 不向控制器中注入bean

时间:2014-08-14 20:57:15

标签: java spring testing jersey

有人可以告诉我如何让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());
        }
    }

问题在于我仍然不知道如何将弹簧安全放在那里......

1 个答案:

答案 0 :(得分:0)

我们的确有所不同。

在我们的WebAppInit中,我们有:

ResourceConfig resourceConfig = new ResourceConfig()
  .packages(
  'foo.package1',
  'foo.package2'
)

然后是RootConfig

@Configuration
@EnableCaching
@ComponentScan(basePackages = [

然后每个注射用@Named注释,每次使用@Inject

祝你好运