2013-11-17 2 views
1

Первоначально я включать свои классы вручную, делая этоJersey 2: как связать классы инъекций без сканирования пакетов?

@ApplicationPath("/") 
public class RestApplication extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<Class<?>>(); 
     classes.add(RestServlet.class); 
     classes.add(RestService.class); 
     return classes; 
    } 
} 

Тогда я нашел out для того, чтобы иметь возможность вводить RestService в RestServlet мне нужно использовать связующее ResourceConfig вместо этого.

public class RestApplication extends ResourceConfig { 
    public RestApplication() { 
     register(new RestBinder()); 
     packages(true, ""); 
    } 
} 

Но я не могу понять, как использовать ResourceConfig без определения пакета и связать его вручную для каждого класса впрыска?

PS Я также не понимаю, как убедиться, что все сканирование пакетов отключено?

ответ

1

Вы можете использовать ResourceConfig#register() метод для этой цели, а также:

public class RestApplication extends ResourceConfig { 
    public RestApplication() { 
     register(new RestBinder()); 

     register(RestServlet.class); 
     register(RestService.class); 
    } 
} 

С такой регистрации ваши пакеты не проверяются на наличие каких-либо других дополнительных ресурсов или поставщиков. Поставщики, обнаруживаемые через META-INF/services, все еще зарегистрированы в вашем приложении. Вы можете отключить эту функцию с помощью, для сервера и клиента, jersey.config.disableMetainfServicesLookup собственности или для сервера только jersey.config.disableMetainfServicesLookup.server (вы можете найти этот и другие свойства в ServerProperties классе):

public class RestApplication extends ResourceConfig { 
    public RestApplication() { 
     register(new RestBinder()); 

     register(RestServlet.class); 
     register(RestService.class); 

     property(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE, true); 
    } 
} 
+0

Works спасибо :) Просто хочу добавить, что Мне не нужно было регистрироваться (RestService.class), 'для' @Inject RestService restService; 'работать в' RestServlet'. 'register (new RestBinder());' и 'register (RestServlet.class);' было достаточно. –

Смежные вопросы